aboutsummaryrefslogtreecommitdiffstats
path: root/sway/commands.c
diff options
context:
space:
mode:
authorLibravatar Brian Ashworth <bosrsf04@gmail.com>2018-09-18 21:44:40 -0400
committerLibravatar Brian Ashworth <bosrsf04@gmail.com>2018-09-28 23:12:24 -0400
commit0a0cf4540ab57ba4af6fb547fd5c1a1df61fb8cf (patch)
tree0b32b31a765eca48ce7739de7f4b602e7c71be57 /sway/commands.c
parentHandle shell special characters in bg file path (diff)
downloadsway-0a0cf4540ab57ba4af6fb547fd5c1a1df61fb8cf.tar.gz
sway-0a0cf4540ab57ba4af6fb547fd5c1a1df61fb8cf.tar.zst
sway-0a0cf4540ab57ba4af6fb547fd5c1a1df61fb8cf.zip
Fix quote handling for commands
Quotes are now stripped for all arguments and stripped before anything is unescaped
Diffstat (limited to 'sway/commands.c')
-rw-r--r--sway/commands.c13
1 files changed, 3 insertions, 10 deletions
diff --git a/sway/commands.c b/sway/commands.c
index bff230f7..03761c52 100644
--- a/sway/commands.c
+++ b/sway/commands.c
@@ -391,14 +391,12 @@ struct cmd_results *config_command(char *exec) {
391 // Var replacement, for all but first argument of set 391 // Var replacement, for all but first argument of set
392 // TODO commands 392 // TODO commands
393 for (i = handler->handle == cmd_set ? 2 : 1; i < argc; ++i) { 393 for (i = handler->handle == cmd_set ? 2 : 1; i < argc; ++i) {
394 if (*argv[i] == '\"' || *argv[i] == '\'') {
395 strip_quotes(argv[i]);
396 }
394 argv[i] = do_var_replacement(argv[i]); 397 argv[i] = do_var_replacement(argv[i]);
395 unescape_string(argv[i]); 398 unescape_string(argv[i]);
396 } 399 }
397 // Strip quotes for first argument.
398 // TODO This part needs to be handled much better
399 if (argc>1 && (*argv[1] == '\"' || *argv[1] == '\'')) {
400 strip_quotes(argv[1]);
401 }
402 if (handler->handle) { 400 if (handler->handle) {
403 results = handler->handle(argc-1, argv+1); 401 results = handler->handle(argc-1, argv+1);
404 } else { 402 } else {
@@ -422,11 +420,6 @@ struct cmd_results *config_subcommand(char **argv, int argc,
422 char *input = argv[0] ? argv[0] : "(empty)"; 420 char *input = argv[0] ? argv[0] : "(empty)";
423 return cmd_results_new(CMD_INVALID, input, "Unknown/invalid command"); 421 return cmd_results_new(CMD_INVALID, input, "Unknown/invalid command");
424 } 422 }
425 // Strip quotes for first argument.
426 // TODO This part needs to be handled much better
427 if (argc > 1 && (*argv[1] == '\"' || *argv[1] == '\'')) {
428 strip_quotes(argv[1]);
429 }
430 if (handler->handle) { 423 if (handler->handle) {
431 return handler->handle(argc - 1, argv + 1); 424 return handler->handle(argc - 1, argv + 1);
432 } 425 }