diff options
author | Denis Vlasenko | 2008-07-01 15:59:42 +0000 |
---|---|---|
committer | Denis Vlasenko | 2008-07-01 15:59:42 +0000 |
commit | 82604e973085f91f1b99cacea08963d0d1468084 (patch) | |
tree | 2de05bb2a6943ca6be0cc46f36e5fb07099aef40 /miscutils | |
parent | b111917972c1398ef96ef2d388c6c4ba57a8e9f7 (diff) | |
download | busybox-82604e973085f91f1b99cacea08963d0d1468084.zip busybox-82604e973085f91f1b99cacea08963d0d1468084.tar.gz |
revert last two commits. vfork cannot be used in subroutine,
it trashes stack on return
Diffstat (limited to 'miscutils')
-rw-r--r-- | miscutils/crontab.c | 8 | ||||
-rw-r--r-- | miscutils/time.c | 4 |
2 files changed, 9 insertions, 3 deletions
diff --git a/miscutils/crontab.c b/miscutils/crontab.c index 4bba9fb..dc3179d 100644 --- a/miscutils/crontab.c +++ b/miscutils/crontab.c @@ -38,8 +38,10 @@ static void change_user(const struct passwd *pas) static void edit_file(const struct passwd *pas, const char *file) { const char *ptr; - int pid = xvfork(); + int pid = vfork(); + if (pid < 0) /* failure */ + bb_perror_msg_and_die("vfork"); if (pid) { /* parent */ wait4pid(pid); return; @@ -63,7 +65,9 @@ static int open_as_user(const struct passwd *pas, const char *file) pid_t pid; char c; - pid = xvfork(); + pid = vfork(); + if (pid < 0) /* ERROR */ + bb_perror_msg_and_die("vfork"); if (pid) { /* PARENT */ if (wait4pid(pid) == 0) { /* exitcode 0: child says it can read */ diff --git a/miscutils/time.c b/miscutils/time.c index 104548c..a6d158c 100644 --- a/miscutils/time.c +++ b/miscutils/time.c @@ -372,7 +372,9 @@ static void run_command(char *const *cmd, resource_t *resp) void (*quit_signal)(int); resp->elapsed_ms = monotonic_us() / 1000; - pid = xvfork(); /* Run CMD as child process. */ + pid = vfork(); /* Run CMD as child process. */ + if (pid < 0) + bb_error_msg_and_die("cannot fork"); if (pid == 0) { /* If child. */ /* Don't cast execvp arguments; that causes errors on some systems, versus merely warnings if the cast is left off. */ |