wordexp(): Simplify code by deferring work to sh.

This commit is contained in:
jilles 2013-05-09 11:43:45 +00:00
parent a61a6fd73b
commit a222062d02

View File

@ -139,25 +139,15 @@ we_askshell(const char *words, wordexp_t *we, int flags)
* We are the child; just get /bin/sh to run the wordexp
* builtin on `words'.
*/
int devnull;
char *cmd;
(void)_sigprocmask(SIG_SETMASK, &oldsigblock, NULL);
_close(pdes[0]);
if (_dup2(pdes[1], STDOUT_FILENO) < 0)
_exit(1);
_close(pdes[1]);
if (asprintf(&cmd, "wordexp %s\n", words) < 0)
_exit(1);
if ((flags & WRDE_SHOWERR) == 0) {
if ((devnull = _open(_PATH_DEVNULL, O_RDWR, 0666)) < 0)
_exit(1);
if (_dup2(devnull, STDERR_FILENO) < 0)
_exit(1);
_close(devnull);
}
execl(_PATH_BSHELL, "sh", flags & WRDE_UNDEF ? "-u" : "+u",
"-c", cmd, (char *)NULL);
"-c", "eval \"$1\";eval \"wordexp $2\"", "",
flags & WRDE_SHOWERR ? "" : "exec 2>/dev/null", words,
(char *)NULL);
_exit(1);
}