Просмотр исходного кода

AK: Remove strtoull dependency from format.

This function is not avaliable in the kernel.

In the future it would be nice to have some sort of <charconv> header
that does this for all integer types and then call it in strtoull and et
cetera.

The difference would be that this function say 'from_chars' would return
an Optional and not just interpret anything invalid as zero.
asynts 4 лет назад
Родитель
Сommit
4fcdc19b14
3 измененных файлов с 12 добавлено и 3 удалено
  1. 10 3
      AK/Format.cpp
  2. 1 0
      AK/Format.h
  3. 1 0
      Kernel/CMakeLists.txt

+ 10 - 3
AK/Format.cpp

@@ -71,12 +71,19 @@ static void write_escaped_literal(StringBuilder& builder, StringView literal)
             ++idx;
     }
 }
+
 static size_t parse_number(StringView input)
 {
-    String null_terminated { input };
-    char* endptr;
-    return strtoull(null_terminated.characters(), &endptr, 10);
+    size_t value = 0;
+
+    for (char ch : input) {
+        value *= 10;
+        value += ch - '0';
+    }
+
+    return value;
 }
+
 static bool parse_format_specifier(StringView input, FormatSpecifier& specifier)
 {
     specifier.index = NumericLimits<size_t>::max();

+ 1 - 0
AK/Format.h

@@ -28,6 +28,7 @@
 
 #include <AK/Array.h>
 #include <AK/String.h>
+#include <AK/StringView.h>
 
 namespace AK {
 

+ 1 - 0
Kernel/CMakeLists.txt

@@ -209,6 +209,7 @@ set(AK_SOURCES
     ../AK/StringUtils.cpp
     ../AK/StringView.cpp
     ../AK/Time.cpp
+    ../AK/Format.cpp
 )
 
 set(ELF_SOURCES