diff options
author | MarcoPolo-PasTonMolo <marcopolopastonmolo@protonmail.com> | 2022-06-16 21:07:15 +0300 |
---|---|---|
committer | MarcoPolo-PasTonMolo <marcopolopastonmolo@protonmail.com> | 2022-06-16 21:07:15 +0300 |
commit | 13f1b831df2dc02a54e888c2f35b3acdb2baef7c (patch) | |
tree | bd5e856494f432dfaa4e93ffd69f829a2937cf75 | |
parent | 7cb045fce78e4c8f89b546658d8d088e2a9c4a6e (diff) | |
download | profani-tty-13f1b831df2dc02a54e888c2f35b3acdb2baef7c.tar.gz |
Improve cmd argument parser
"" used to become " now it just becomes an empty argument. Also if quotes appeared after a token started then if the number of quotes in the token is n the resulting one would be a token with the n last characters cut off, now it's fixed. Fixes https://github.com/profanity-im/profanity/issues/497
-rw-r--r-- | src/tools/parser.c | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/src/tools/parser.c b/src/tools/parser.c index 98dc5809..30c1961f 100644 --- a/src/tools/parser.c +++ b/src/tools/parser.c @@ -83,8 +83,17 @@ _parse_args_helper(const char* const inp, int min, int max, gboolean* result, gb i++; gchar* next_ch = g_utf8_next_char(curr_ch); gunichar next_uni = g_utf8_get_char(next_ch); - token_start = next_ch; - token_size += g_unichar_to_utf8(next_uni, NULL); + + if (next_uni == '"') { + tokens = g_slist_append(tokens, g_strndup(curr_ch, + 0)); + token_size = 0; + in_token = FALSE; + in_quotes = FALSE; + } else { + token_start = next_ch; + token_size += g_unichar_to_utf8(next_uni, NULL); + } } if (curr_uni == '"') { gchar* next_ch = g_utf8_next_char(curr_ch); @@ -115,7 +124,7 @@ _parse_args_helper(const char* const inp, int min, int max, gboolean* result, gb token_size)); token_size = 0; in_token = FALSE; - } else if (curr_uni != '"') { + } else { token_size += g_unichar_to_utf8(curr_uni, NULL); } } |