diff options
-rw-r--r-- | aidl_language.cpp | 14 |
1 files changed, 5 insertions, 9 deletions
diff --git a/aidl_language.cpp b/aidl_language.cpp index 6af55f8..bbe305b 100644 --- a/aidl_language.cpp +++ b/aidl_language.cpp @@ -6,6 +6,7 @@ #include <string.h> #include <string> +#include <android-base/parseint.h> #include <android-base/strings.h> #include "aidl_language_y.h" @@ -96,19 +97,14 @@ AidlIntConstant::AidlIntConstant(std::string name, std::string value, unsigned line_number) : name_(name) { - char *end; - // Use long long to ensure 0xFFFFFFFF -> -1 works on 32 bit devices. - unsigned long long int long_value = std::strtoull(value.c_str(), &end, 16); - // Ensure that we parsed the string fully and the value fits in int32. - if ((*end != '\0') || - ((long_value == ULLONG_MAX) && (errno == ERANGE)) || - (long_value > std::numeric_limits<uint32_t>::max())) { + uint32_t unsigned_val; + if (!android::base::ParseUint(value.c_str(), &unsigned_val)) { is_valid_ = false; LOG(ERROR) << "Found invalid int value '" << value << "' on line " << line_number; } else { - // Converting from unsigned long to signed integer. - value_ = long_value; + // Converting from unsigned to signed integer. + value_ = unsigned_val; is_valid_ = true; } } |