diff options
Diffstat (limited to 'libs/input/PropertyMap.cpp')
-rw-r--r-- | libs/input/PropertyMap.cpp | 29 |
1 files changed, 12 insertions, 17 deletions
diff --git a/libs/input/PropertyMap.cpp b/libs/input/PropertyMap.cpp index 4833eb9c05..a842166761 100644 --- a/libs/input/PropertyMap.cpp +++ b/libs/input/PropertyMap.cpp @@ -107,23 +107,22 @@ void PropertyMap::addAll(const PropertyMap* map) { } } -status_t PropertyMap::load(const String8& filename, PropertyMap** outMap) { - *outMap = nullptr; +android::base::Result<std::unique_ptr<PropertyMap>> PropertyMap::load(const char* filename) { + std::unique_ptr<PropertyMap> outMap = std::make_unique<PropertyMap>(); + if (outMap == nullptr) { + return android::base::Error(NO_MEMORY) << "Error allocating property map."; + } - Tokenizer* tokenizer; - status_t status = Tokenizer::open(filename, &tokenizer); + Tokenizer* rawTokenizer; + status_t status = Tokenizer::open(String8(filename), &rawTokenizer); + std::unique_ptr<Tokenizer> tokenizer(rawTokenizer); if (status) { - ALOGE("Error %d opening property file %s.", status, filename.string()); + ALOGE("Error %d opening property file %s.", status, filename); } else { - PropertyMap* map = new PropertyMap(); - if (!map) { - ALOGE("Error allocating property map."); - status = NO_MEMORY; - } else { #if DEBUG_PARSER_PERFORMANCE nsecs_t startTime = systemTime(SYSTEM_TIME_MONOTONIC); #endif - Parser parser(map, tokenizer); + Parser parser(outMap.get(), tokenizer.get()); status = parser.parse(); #if DEBUG_PARSER_PERFORMANCE nsecs_t elapsedTime = systemTime(SYSTEM_TIME_MONOTONIC) - startTime; @@ -132,14 +131,10 @@ status_t PropertyMap::load(const String8& filename, PropertyMap** outMap) { elapsedTime / 1000000.0); #endif if (status) { - delete map; - } else { - *outMap = map; + return android::base::Error(BAD_VALUE) << "Could not parse " << filename; } - } - delete tokenizer; } - return status; + return std::move(outMap); } // --- PropertyMap::Parser --- |