summaryrefslogtreecommitdiff
path: root/devel/android-tools-adb/files/extra-patch-revert-d3d650628c8c
diff options
context:
space:
mode:
Diffstat (limited to 'devel/android-tools-adb/files/extra-patch-revert-d3d650628c8c')
-rw-r--r--devel/android-tools-adb/files/extra-patch-revert-d3d650628c8c56
1 files changed, 56 insertions, 0 deletions
diff --git a/devel/android-tools-adb/files/extra-patch-revert-d3d650628c8c b/devel/android-tools-adb/files/extra-patch-revert-d3d650628c8c
new file mode 100644
index 000000000000..b843ecbe7f4e
--- /dev/null
+++ b/devel/android-tools-adb/files/extra-patch-revert-d3d650628c8c
@@ -0,0 +1,56 @@
+In file included from adb_utils.cpp:19:
+adb/adb_utils.h:19:10: fatal error: 'charconv' file not found
+#include <charconv>
+ ^~~~~~~~~~
+
+--- adb/adb_utils.h.orig 2019-10-18 00:22:21 UTC
++++ adb/adb_utils.h
+@@ -16,7 +16,6 @@
+
+ #pragma once
+
+-#include <charconv>
+ #include <condition_variable>
+ #include <mutex>
+ #include <string>
+@@ -113,17 +112,33 @@ inline std::string_view StripTrailingNulls(std::string
+ // Base-10 stroll on a string_view.
+ template <typename T>
+ inline bool ParseUint(T* result, std::string_view str, std::string_view* remaining = nullptr) {
+- T value;
+- const auto res = std::from_chars(str.begin(), str.end(), value);
+- if (res.ec != std::errc{}) {
++ if (str.empty() || !isdigit(str[0])) {
+ return false;
+ }
+- if (res.ptr != str.end() && !remaining) {
+- return false;
++
++ T value = 0;
++ std::string_view::iterator it;
++ constexpr T max = std::numeric_limits<T>::max();
++ for (it = str.begin(); it != str.end() && isdigit(*it); ++it) {
++ if (value > max / 10) {
++ return false;
++ }
++
++ value *= 10;
++
++ T digit = *it - '0';
++ if (value > max - digit) {
++ return false;
++ }
++
++ value += digit;
+ }
++ *result = value;
+ if (remaining) {
+- *remaining = std::string_view(res.ptr, str.end() - res.ptr);
++ *remaining = str.substr(it - str.begin());
++ } else {
++ return it == str.end();
+ }
+- *result = value;
++
+ return true;
+ }