diff options
| author | Denis Vlasenko <vda.linux@googlemail.com> | 2008-07-01 15:59:42 +0000 |
|---|---|---|
| committer | Denis Vlasenko <vda.linux@googlemail.com> | 2008-07-01 15:59:42 +0000 |
| commit | 82604e973085f91f1b99cacea08963d0d1468084 (patch) | |
| tree | 2de05bb2a6943ca6be0cc46f36e5fb07099aef40 /miscutils | |
| parent | b111917972c1398ef96ef2d388c6c4ba57a8e9f7 (diff) | |
| download | busybox-w32-82604e973085f91f1b99cacea08963d0d1468084.tar.gz busybox-w32-82604e973085f91f1b99cacea08963d0d1468084.tar.bz2 busybox-w32-82604e973085f91f1b99cacea08963d0d1468084.zip | |
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 4bba9fb44..dc3179dac 100644 --- a/miscutils/crontab.c +++ b/miscutils/crontab.c | |||
| @@ -38,8 +38,10 @@ static void change_user(const struct passwd *pas) | |||
| 38 | static void edit_file(const struct passwd *pas, const char *file) | 38 | static void edit_file(const struct passwd *pas, const char *file) |
| 39 | { | 39 | { |
| 40 | const char *ptr; | 40 | const char *ptr; |
| 41 | int pid = xvfork(); | 41 | int pid = vfork(); |
| 42 | 42 | ||
| 43 | if (pid < 0) /* failure */ | ||
| 44 | bb_perror_msg_and_die("vfork"); | ||
| 43 | if (pid) { /* parent */ | 45 | if (pid) { /* parent */ |
| 44 | wait4pid(pid); | 46 | wait4pid(pid); |
| 45 | return; | 47 | return; |
| @@ -63,7 +65,9 @@ static int open_as_user(const struct passwd *pas, const char *file) | |||
| 63 | pid_t pid; | 65 | pid_t pid; |
| 64 | char c; | 66 | char c; |
| 65 | 67 | ||
| 66 | pid = xvfork(); | 68 | pid = vfork(); |
| 69 | if (pid < 0) /* ERROR */ | ||
| 70 | bb_perror_msg_and_die("vfork"); | ||
| 67 | if (pid) { /* PARENT */ | 71 | if (pid) { /* PARENT */ |
| 68 | if (wait4pid(pid) == 0) { | 72 | if (wait4pid(pid) == 0) { |
| 69 | /* exitcode 0: child says it can read */ | 73 | /* exitcode 0: child says it can read */ |
diff --git a/miscutils/time.c b/miscutils/time.c index 104548c23..a6d158c53 100644 --- a/miscutils/time.c +++ b/miscutils/time.c | |||
| @@ -372,7 +372,9 @@ static void run_command(char *const *cmd, resource_t *resp) | |||
| 372 | void (*quit_signal)(int); | 372 | void (*quit_signal)(int); |
| 373 | 373 | ||
| 374 | resp->elapsed_ms = monotonic_us() / 1000; | 374 | resp->elapsed_ms = monotonic_us() / 1000; |
| 375 | pid = xvfork(); /* Run CMD as child process. */ | 375 | pid = vfork(); /* Run CMD as child process. */ |
| 376 | if (pid < 0) | ||
| 377 | bb_error_msg_and_die("cannot fork"); | ||
| 376 | if (pid == 0) { /* If child. */ | 378 | if (pid == 0) { /* If child. */ |
| 377 | /* Don't cast execvp arguments; that causes errors on some systems, | 379 | /* Don't cast execvp arguments; that causes errors on some systems, |
| 378 | versus merely warnings if the cast is left off. */ | 380 | versus merely warnings if the cast is left off. */ |
