From 399d5338c69b72fb1f15c0923d26870f17a0b8ec Mon Sep 17 00:00:00 2001 From: Bananymous Date: Thu, 28 Sep 2023 10:28:49 +0300 Subject: [PATCH] Shell: String leading and trailing whitespace from commands This fixes a bug of inserting empty argument if command had trailing whitespace --- userspace/Shell/main.cpp | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/userspace/Shell/main.cpp b/userspace/Shell/main.cpp index 3a59bcb8..b4036763 100644 --- a/userspace/Shell/main.cpp +++ b/userspace/Shell/main.cpp @@ -159,6 +159,21 @@ BAN::Optional parse_dollar(BAN::StringView command, size_t& i) return "$"sv; } +BAN::StringView strip_whitespace(BAN::StringView sv) +{ + size_t leading = 0; + while (leading < sv.size() && isspace(sv[leading])) + leading++; + sv = sv.substring(leading); + + size_t trailing = 0; + while (trailing < sv.size() && isspace(sv[sv.size() - trailing - 1])) + trailing++; + sv = sv.substring(0, sv.size() - trailing); + + return sv; +} + BAN::Vector> parse_command(BAN::StringView command_view) { enum class State @@ -168,6 +183,8 @@ BAN::Vector> parse_command(BAN::StringView command_view DoubleQuote, }; + command_view = strip_whitespace(command_view); + BAN::Vector> result; BAN::Vector command_args;