summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Userland/Libraries/LibC/scanf.cpp8
-rw-r--r--Userland/Tests/LibC/scanf.cpp1
2 files changed, 9 insertions, 0 deletions
diff --git a/Userland/Libraries/LibC/scanf.cpp b/Userland/Libraries/LibC/scanf.cpp
index aae825a426..964f219d72 100644
--- a/Userland/Libraries/LibC/scanf.cpp
+++ b/Userland/Libraries/LibC/scanf.cpp
@@ -418,6 +418,14 @@ extern "C" int vsscanf(const char* input, const char* format, va_list ap)
format_lexer.ignore(); // '%'
+ // Parse width specification
+ [[maybe_unused]] int width_specifier = 0;
+ if (format_lexer.next_is(isdigit)) {
+ auto width_digits = format_lexer.consume_while([](char c) { return isdigit(c); });
+ width_specifier = width_digits.to_int().value();
+ // FIXME: Actually use width specifier
+ }
+
bool invert_scanlist = false;
StringView scanlist;
LengthModifier length_modifier { None };
diff --git a/Userland/Tests/LibC/scanf.cpp b/Userland/Tests/LibC/scanf.cpp
index 73f6c858ad..a23e93316b 100644
--- a/Userland/Tests/LibC/scanf.cpp
+++ b/Userland/Tests/LibC/scanf.cpp
@@ -170,6 +170,7 @@ const TestSuite test_suites[] {
{ "%d", "", 0, 0, {}, {} },
{ "%x", "0x519", 1, 1, { unsignedarg0 }, { to_value_t(0x519) } },
{ "%x", "0x51g", 1, 1, { unsignedarg0 }, { to_value_t(0x51u) } },
+ { "%06x", "0xabcdef", 1, 1, { unsignedarg0 }, { to_value_t(0xabcdefu) } },
{ "\"%%%d#", "\"%42#", 1, 1, { intarg0 }, { to_value_t(42) } },
{ " %d", "42", 1, 1, { intarg0 }, { to_value_t(42) } },
{ "%d", " 42", 1, 1, { intarg0 }, { to_value_t(42) } },