From 2992892b9b39cb77ad5120ed3924baac575b2d5d Mon Sep 17 00:00:00 2001 From: Aleksey Sakovets Date: Sun, 11 May 2025 15:29:55 +0300 Subject: [PATCH] tokenize: perform tilde expansion when tokenizing command line --- tokenize.c | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/tokenize.c b/tokenize.c index 77cc3f1a..afcb7a6f 100644 --- a/tokenize.c +++ b/tokenize.c @@ -52,12 +52,10 @@ tokenize_cmdline(const char *cmdline, char ***argv) goto err; } - if (!push_argv(argv, &argv_size, p, final_end - p, &idx) || - !push_argv(argv, &argv_size, NULL, 0, &idx)) - { + if (!push_argv(argv, &argv_size, p, final_end - p, &idx)) goto err; - } else - return true; + + break; } if (end > p && *(end - 1) == '\\') { @@ -92,6 +90,19 @@ tokenize_cmdline(const char *cmdline, char ***argv) if (!push_argv(argv, &argv_size, NULL, 0, &idx)) goto err; + // expand '~/' + if (**argv && (**argv)[0] == '~' && (**argv)[1] == '/') { + const char *homedir = getenv("HOME"); + if (homedir == NULL) { + LOG_ERR("failed to expand '~': HOME not set"); + goto err; + } + + char *argv0 = xstrjoin3(homedir, "/", **argv + 2); + free(**argv); + **argv = argv0; + } + return true; err: