tokenize: perform tilde expansion when tokenizing command line

This commit is contained in:
Aleksey Sakovets 2025-05-11 15:29:55 +03:00
parent 9b0d5e7c96
commit 2992892b9b

View file

@ -52,12 +52,10 @@ tokenize_cmdline(const char *cmdline, char ***argv)
goto err; goto err;
} }
if (!push_argv(argv, &argv_size, p, final_end - p, &idx) || if (!push_argv(argv, &argv_size, p, final_end - p, &idx))
!push_argv(argv, &argv_size, NULL, 0, &idx))
{
goto err; goto err;
} else
return true; break;
} }
if (end > p && *(end - 1) == '\\') { 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)) if (!push_argv(argv, &argv_size, NULL, 0, &idx))
goto err; 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; return true;
err: err: