aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRob Landley <rob@landley.net>2017-02-04 00:34:31 -0600
committerRob Landley <rob@landley.net>2017-02-04 00:34:31 -0600
commit938901d7e2738be29b83331fb60a670afc20c602 (patch)
tree7787456d7ea14cc91c39bc2e039ccfbcafbb1138
parentcc24b6033a9cdc326006a537bd26c482ec7d7354 (diff)
downloadtoybox-938901d7e2738be29b83331fb60a670afc20c602.tar.gz
Switch oneit to use xopen_stdio() for -c (oops) and switch XVFORK() to use
__attribute__((returns_twice)) instead of noinline. Yes LLVM supports it: https://llvm.org/bugs/show_bug.cgi?id=6287
-rw-r--r--lib/lib.h2
-rw-r--r--lib/xwrap.c2
-rw-r--r--toys/other/oneit.c4
3 files changed, 4 insertions, 4 deletions
diff --git a/lib/lib.h b/lib/lib.h
index 2cb0c07a..e90e79f2 100644
--- a/lib/lib.h
+++ b/lib/lib.h
@@ -322,7 +322,7 @@ void mode_to_string(mode_t mode, char *buf);
char *getbasename(char *name);
void names_to_pid(char **names, int (*callback)(pid_t pid, char *name));
-pid_t xvforkwrap(pid_t pid);
+pid_t __attribute__((returns_twice)) xvforkwrap(pid_t pid);
#define XVFORK() xvforkwrap(vfork())
// Wrapper to make xfuncs() return (via longjmp) instead of exiting.
diff --git a/lib/xwrap.c b/lib/xwrap.c
index 611bdb52..2e52d6b4 100644
--- a/lib/xwrap.c
+++ b/lib/xwrap.c
@@ -163,7 +163,7 @@ void xflush(void)
// share a stack, so child returning from a function would stomp the return
// address parent would need. Solution: make vfork() an argument so processes
// diverge before function gets called.
-pid_t __attribute__((noinline)) xvforkwrap(pid_t pid)
+pid_t __attribute__((returns_twice)) xvforkwrap(pid_t pid)
{
if (pid == -1) perror_exit("vfork");
diff --git a/toys/other/oneit.c b/toys/other/oneit.c
index 9be67c05..68b5bd8c 100644
--- a/toys/other/oneit.c
+++ b/toys/other/oneit.c
@@ -79,7 +79,7 @@ void oneit_main(void)
while (!toys.signal) {
// Create a new child process.
- pid = vfork();
+ pid = XVFORK();
if (pid) {
// pid 1 reaps zombies until it gets its child, then halts system.
@@ -96,7 +96,7 @@ void oneit_main(void)
for (i=0; i<3; i++) {
close(i);
// Remember, O_CLOEXEC is backwards for xopen()
- xopen(TT.console ? TT.console : "/dev/tty0", O_RDWR|O_CLOEXEC);
+ xopen_stdio(TT.console ? TT.console : "/dev/tty0", O_RDWR|O_CLOEXEC);
}
// Can't xexec() here, we vforked so we don't want to error_exit().