summaryrefslogtreecommitdiff
path: root/Source/Core/Common/StringUtil.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/Core/Common/StringUtil.cpp')
-rw-r--r--Source/Core/Common/StringUtil.cpp24
1 files changed, 13 insertions, 11 deletions
diff --git a/Source/Core/Common/StringUtil.cpp b/Source/Core/Common/StringUtil.cpp
index 03e6bb3d45..445224757b 100644
--- a/Source/Core/Common/StringUtil.cpp
+++ b/Source/Core/Common/StringUtil.cpp
@@ -226,25 +226,27 @@ std::string StripQuotes(const std::string& s)
return s;
}
-bool TryParse(const std::string& str, u32* const output)
+bool TryParse(const std::string& str, u16* const output)
{
- char* endptr = nullptr;
-
- // Reset errno to a value other than ERANGE
- errno = 0;
-
- unsigned long value = strtoul(str.c_str(), &endptr, 0);
+ u64 value;
+ if (!TryParse(str, &value))
+ return false;
- if (!endptr || *endptr)
+ if (value >= 0x10000ull && value <= 0xFFFFFFFFFFFF0000ull)
return false;
- if (errno == ERANGE)
+ *output = static_cast<u16>(value);
+ return true;
+}
+
+bool TryParse(const std::string& str, u32* const output)
+{
+ u64 value;
+ if (!TryParse(str, &value))
return false;
-#if ULONG_MAX > UINT_MAX
if (value >= 0x100000000ull && value <= 0xFFFFFFFF00000000ull)
return false;
-#endif
*output = static_cast<u32>(value);
return true;