diff options
author | Jelle Raaijmakers <jelle@gmta.nl> | 2021-04-04 02:01:24 +0200 |
---|---|---|
committer | Andreas Kling <kling@serenityos.org> | 2021-04-04 08:28:47 +0200 |
commit | 5e5f0245b6aa42d07343b8ae04b8dbfb175fe4ef (patch) | |
tree | 4bd8957f255aa1f4dec787b2864043580f247364 /Userland | |
parent | 7f1f6d96b404be21cd873a8a2eb408ec732c6a39 (diff) | |
download | serenity-5e5f0245b6aa42d07343b8ae04b8dbfb175fe4ef.zip |
LibC: Teach `vsscanf()` to consume the width specifier
Previously, `vsscanf()` would crash whenever it encountered a width
specification. Now, it consumes the width specification but does not
yet do anything with it.
Diffstat (limited to 'Userland')
-rw-r--r-- | Userland/Libraries/LibC/scanf.cpp | 8 | ||||
-rw-r--r-- | Userland/Tests/LibC/scanf.cpp | 1 |
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) } }, |