libbb: consolidate NOMMU fix of restoring high bit in argv[0][0]
No binary (build failed)
—
(log yok)
| @@ -504,7 +504,6 @@ int cpio_main(int argc UNUSED_PARAM, char **argv) | |
| goto dump; | |
| } | |
| /* parent */ | |
| - | USE_FOR_NOMMU(argv[-optind][0] &= 0x7f); /* undo fork_or_rexec() damage */ |
| xchdir(*argv++); | |
| close(pp.wr); | |
| xmove_fd(pp.rd, STDIN_FILENO); | |
| @@ -1319,7 +1319,7 @@ enum { | |
| # define bb_daemonize(flags) bb_daemonize_or_rexec(flags, bogus) | |
| #else | |
| extern bool re_execed; | |
| - | /* Note: re_exec() and fork_or_rexec() do argv[0][0] |= 0x80 on NOMMU! |
| + | /* Note: re_exec() sets argv[0][0] |= 0x80 on NOMMU! |
| * _Parent_ needs to undo it if it doesn't want to have argv[0] mangled. | |
| */ | |
| void re_exec(char **argv) NORETURN FAST_FUNC; | |
| @@ -435,8 +435,6 @@ int bootchartd_main(int argc UNUSED_PARAM, char **argv) | |
| /* parent */ | |
| - | USE_FOR_NOMMU(argv[0][0] &= 0x7f); /* undo fork_or_rexec() damage */ |
| - | |
| if (DO_SIGNAL_SYNC) { | |
| /* Wait for logger child to set handlers, then unpause it. | |
| * Otherwise with short-lived PROG (e.g. "bootchartd start true") | |
| @@ -268,10 +268,12 @@ pid_t FAST_FUNC fork_or_rexec(char **argv) | |
| /* fflush_all(); ? - so far all callers had no buffered output to flush */ | |
| pid = xvfork(); | |
| - | if (pid) /* parent */ |
| - | return pid; |
| - | /* child - re-exec ourself */ |
| - | re_exec(argv); |
| + | if (pid == 0) /* child - re-exec ourself */ |
| + | re_exec(argv); /* NORETURN */ |
| + | |
| + | /* parent */ |
| + | argv[0][0] &= 0x7f; /* undo re_rexec() damage */ |
| + | return pid; |
| } | |
| #endif | |
| @@ -2713,8 +2713,8 @@ static void mini_httpd_nommu(int server_socket, int argc, char **argv) | |
| /* Run a copy of ourself in inetd mode */ | |
| re_exec(argv_copy); | |
| } | |
| - | argv_copy[0][0] &= 0x7f; |
| /* parent, or vfork failed */ | |
| + | argv_copy[0][0] &= 0x7f; /* undo re_rexec() damage */ |
| close(n); | |
| } /* while (1) */ | |
| /* never reached */ | |