From 4d9f9774a1082616166387c380ede6b9b98d83fe Mon Sep 17 00:00:00 2001 From: Siarhei Vishniakou Date: Wed, 2 Sep 2020 22:28:29 -0500 Subject: Return owned object from PropertyMap To help keep track of object ownership, use smart pointers in PropertyMap. Bug: 163171599 Test: presubmit Change-Id: I4194e6640c8b0e1ec0db9d9e65b3f6862d6f37d4 --- libs/input/PropertyMap.cpp | 29 ++++++++++++----------------- 1 file changed, 12 insertions(+), 17 deletions(-) (limited to 'libs/input/PropertyMap.cpp') 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> PropertyMap::load(const char* filename) { + std::unique_ptr outMap = std::make_unique(); + 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(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 --- -- cgit v1.2.3-59-g8ed1b