summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--aidl_language.cpp14
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;
}
}