{
struct toy_list *which;
+ // don't blank old optargs if our new argc lives in the old optargs.
+ if (argv>=toys.optargs && argv<=toys.optargs+toys.optc) toys.optargs = 0;
+
// Return if we can't find it, or need to re-exec to acquire root,
// or if stack depth is getting silly.
if (!(which = toy_find(argv[0]))) return;
char *binsh[] = {"/bin/sh", "-i", 0};
if (chdir(*toys.optargs) || chroot(".")) perror_exit("%s", *toys.optargs);
- if (toys.optargs[1]) xexec_optargs(1);
+ if (toys.optargs[1]) xexec(toys.optargs+1);
else xexec(binsh);
}
set_alarm(0);
if (CFG_NETCAT_LISTEN && (toys.optflags&(FLAG_L|FLAG_l) && toys.optc))
- xexec_optargs(0);
+ xexec(toys.optargs);
// Poll loop copying stdin->socket and socket->stdout.
for (;;) {
}
}
- xexec_optargs(0);
+ xexec(toys.optargs);
}
setpgid(0,0);
tcsetpgrp(0, getpid());
}
- xexec_optargs(0);
+ xexec(toys.optargs);
}
if (!(toys.optflags & FLAG_p)) {
if (toys.optc < 2) error_exit("Needs 2 args");
do_taskset(getpid(), 1);
- xexec_optargs(1);
+ xexec(toys.optargs+1);
} else {
char *c;
pid_t pid = strtol(toys.optargs[toys.optc-1], &c, 10);
if (TT.s_signal && -1 == (TT.nextsig = sig_to_num(TT.s_signal)))
error_exit("bad -s: '%s'", TT.s_signal);
- if (!(TT.pid = xfork())) xexec_optargs(1);
+ if (!(TT.pid = xfork())) xexec(toys.optargs+1);
else {
int status;
if (bchartd_opt == 1 && toys.optargs[1]) {
pid_t prog_pid;
- if (!(prog_pid = xfork())) xexec_optargs(1);
+ if (!(prog_pid = xfork())) xexec(toys.optargs+1);
waitpid(prog_pid, NULL, 0);
kill(lgr_pid, SIGUSR1);
}
close(1);
dup2(newfd, 0);
dup2(newfd, 1);
- xexec_optargs(2); //skip IP PORT
+ xexec(toys.optargs+2); //skip IP PORT
} else {
insert(&pids, pid, addr);
xclose(newfd); //close and reopen for next client.
errno = 0;
if (nice(TT.priority)==-1 && errno) perror_exit("Can't set priority");
- xexec_optargs(0);
+ xexec(toys.optargs);
}
close(0);
open("/dev/null", O_RDONLY);
}
- xexec_optargs(0);
+ xexec(toys.optargs);
}
struct timeval tv, tv2;
gettimeofday(&tv, NULL);
- if (!(pid = xfork())) xexec_optargs(0);
+ if (!(pid = xfork())) xexec(toys.optargs);
else {
int stat;
struct rusage ru;