[PATCH] ash: distinguish 'wait -n' from other bashisms
Denys Vlasenko
vda.linux at googlemail.com
Tue Apr 2 11:46:58 UTC 2019
Applied, thanks!
On Sun, Mar 31, 2019 at 10:27 AM Ron Yorston <rmy at pobox.com> wrote:
>
> Add a specific define to indicate which bash compatibility code
> implements 'wait -n'.
>
> Signed-off-by: Ron Yorston <rmy at pobox.com>
> ---
> shell/ash.c | 15 ++++++++-------
> 1 file changed, 8 insertions(+), 7 deletions(-)
>
> diff --git a/shell/ash.c b/shell/ash.c
> index b1499b037..34d5d6d68 100644
> --- a/shell/ash.c
> +++ b/shell/ash.c
> @@ -224,6 +224,7 @@
> #define BASH_XTRACEFD ENABLE_ASH_BASH_COMPAT
> #define BASH_READ_D ENABLE_ASH_BASH_COMPAT
> #define IF_BASH_READ_D IF_ASH_BASH_COMPAT
> +#define BASH_WAIT_N ENABLE_ASH_BASH_COMPAT
>
> #if defined(__ANDROID_API__) && __ANDROID_API__ <= 24
> /* Bionic at least up to version 24 has no glob() */
> @@ -4235,7 +4236,7 @@ wait_block_or_sig(int *status)
> #define DOWAIT_NONBLOCK 0
> #define DOWAIT_BLOCK 1
> #define DOWAIT_BLOCK_OR_SIG 2
> -#if ENABLE_ASH_BASH_COMPAT
> +#if BASH_WAIT_N
> # define DOWAIT_JOBSTATUS 0x10 /* OR this to get job's exitstatus instead of pid */
> #endif
>
> @@ -4246,7 +4247,7 @@ dowait(int block, struct job *job)
> int status;
> struct job *jp;
> struct job *thisjob;
> -#if ENABLE_ASH_BASH_COMPAT
> +#if BASH_WAIT_N
> bool want_jobexitstatus = (block & DOWAIT_JOBSTATUS);
> block = (block & ~DOWAIT_JOBSTATUS);
> #endif
> @@ -4348,7 +4349,7 @@ dowait(int block, struct job *job)
> out:
> INT_ON;
>
> -#if ENABLE_ASH_BASH_COMPAT
> +#if BASH_WAIT_N
> if (want_jobexitstatus) {
> pid = -1;
> if (thisjob && thisjob->state == JOBDONE)
> @@ -4537,7 +4538,7 @@ waitcmd(int argc UNUSED_PARAM, char **argv)
> struct job *job;
> int retval;
> struct job *jp;
> -#if ENABLE_ASH_BASH_COMPAT
> +#if BASH_WAIT_N
> int status;
> char one = nextopt("n");
> #else
> @@ -4550,7 +4551,7 @@ waitcmd(int argc UNUSED_PARAM, char **argv)
> /* wait for all jobs / one job if -n */
> for (;;) {
> jp = curjob;
> -#if ENABLE_ASH_BASH_COMPAT
> +#if BASH_WAIT_N
> if (one && !jp)
> /* exitcode of "wait -n" with nothing to wait for is 127, not 0 */
> retval = 127;
> @@ -4570,7 +4571,7 @@ waitcmd(int argc UNUSED_PARAM, char **argv)
> * with an exit status greater than 128, immediately after which
> * the trap is executed."
> */
> -#if ENABLE_ASH_BASH_COMPAT
> +#if BASH_WAIT_N
> status = dowait(DOWAIT_BLOCK_OR_SIG | DOWAIT_JOBSTATUS, NULL);
> #else
> dowait(DOWAIT_BLOCK_OR_SIG, NULL);
> @@ -4581,7 +4582,7 @@ waitcmd(int argc UNUSED_PARAM, char **argv)
> */
> if (pending_sig)
> goto sigout;
> -#if ENABLE_ASH_BASH_COMPAT
> +#if BASH_WAIT_N
> if (one) {
> /* wait -n waits for one _job_, not one _process_.
> * date; sleep 3 & sleep 2 | sleep 1 & wait -n; date
> --
> 2.20.1
>
> _______________________________________________
> busybox mailing list
> busybox at busybox.net
> http://lists.busybox.net/mailman/listinfo/busybox
More information about the busybox
mailing list