sync with master
[platform/framework/native/appfw.git] / src / base / FBaseLongLong.cpp
index 3851d48..91a8876 100644 (file)
@@ -161,15 +161,31 @@ LongLong::Parse(const String& s, long long& ret)
        wchar_t* pEnd = null;
 
        int len = s.GetLength();
-       SysTryReturn(NID_BASE, (len > 0), E_NUM_FORMAT, E_NUM_FORMAT, "[E_NUM_FORMAT] The length of s MUST be greater than 0.");
+       SysTryReturnResult(NID_BASE, (len > 0), E_NUM_FORMAT, "[%s] The length of s MUST be greater than 0.",
+               GetErrorMessage(E_NUM_FORMAT));
+
+       return Parse(s, Character::RADIX_DECIMAL, ret);
+}
+
+result
+LongLong::Parse(const String& s, int radix, long long& ret)
+{
+       SysTryReturnResult(NID_BASE, radix == Character::RADIX_BINARY || radix == Character::RADIX_OCTAL ||
+               radix == Character::RADIX_DECIMAL || radix == Character::RADIX_HEXADECIMAL, E_OUT_OF_RANGE,
+               "[%s] The radix(%d) MUST be one of 2, 8, 10 and 16.", GetErrorMessage(E_OUT_OF_RANGE), radix);
+
+       wchar_t* pEnd = null;
+
+       int len = s.GetLength();
+       SysTryReturnResult(NID_BASE, (len > 0), E_NUM_FORMAT, "[%s] The length of s MUST be greater than 0.",
+               GetErrorMessage(E_NUM_FORMAT));
 
        errno = 0;
-       ret = wcstoll(s.GetPointer(), &pEnd, 10);
-       SysTryReturn(NID_BASE, (!(ret == 0 && errno == EINVAL) && (pEnd[0] == 0)), E_NUM_FORMAT, E_NUM_FORMAT,
-                          "[E_NUM_FORMAT] LongLong parse failed. Scan stopped at (%ls)",
-                          pEnd);
-       SysTryReturn(NID_BASE, !(errno == ERANGE && (ret == LLONG_MAX || ret == LLONG_MIN)), E_NUM_FORMAT, E_NUM_FORMAT,
-                          "[E_NUM_FORMAT] Parsed value cannot fit into a LongLong.");
+       ret = wcstoll(s.GetPointer(), &pEnd, radix);
+       SysTryReturnResult(NID_BASE, (pEnd[0] == 0), E_NUM_FORMAT, "[%s] LongLong parse failed. Scan stopped at (%ls).",
+               GetErrorMessage(E_NUM_FORMAT), pEnd);
+       SysTryReturnResult(NID_BASE, !(errno == ERANGE && (ret == LLONG_MAX || ret == LLONG_MIN)), E_NUM_FORMAT,
+               "[%s] Parsed value cannot fit into a long long.", GetErrorMessage(E_NUM_FORMAT));
 
        return E_SUCCESS;
 }