This feature is used by Git's test suite. That is the incentive. It was also pretty to implement, so why not ;-)
Changes since v1: - split into two patches, one for ash, one for hush, to make it easier to drop the hush one if so desired. - hide the feature behind the *_BASH_COMPAT knobs, as suggested by Kang-Che Sung. Johannes Schindelin (2): ash: implement -d DELIM option for `read` hush: implement -d DELIM option for `read` shell/ash.c | 19 ++++++++++++++++--- shell/hush.c | 24 ++++++++++++++++++++++-- shell/shell_common.c | 10 +++++++--- shell/shell_common.h | 3 ++- 4 files changed, 47 insertions(+), 9 deletions(-) base-commit: 73adef14b25533b71238362da75bfb482d43d98b Published-As: https://github.com/dscho/busybox-w32/releases/tag/busybox-read-d-v2 Fetch-It-Via: git fetch https://github.com/dscho/busybox-w32 busybox-read-d-v2 Interdiff vs v1: diff --git a/shell/ash.c b/shell/ash.c index e2d98584a..4b0896573 100644 --- a/shell/ash.c +++ b/shell/ash.c @@ -189,6 +189,8 @@ #define BASH_HOSTNAME_VAR ENABLE_ASH_BASH_COMPAT #define BASH_SHLVL_VAR ENABLE_ASH_BASH_COMPAT #define BASH_XTRACEFD ENABLE_ASH_BASH_COMPAT +#define BASH_READ_D ENABLE_ASH_BASH_COMPAT +#define IF_BASH_READ_D IF_ASH_BASH_COMPAT #if defined(__ANDROID_API__) && __ANDROID_API__ <= 24 /* Bionic at least up to version 24 has no glob() */ @@ -13415,7 +13417,7 @@ readcmd(int argc UNUSED_PARAM, char **argv UNUSED_PARAM) char *opt_p = NULL; char *opt_t = NULL; char *opt_u = NULL; - char *opt_d = NULL; + IF_BASH_READ_D(char *opt_d = NULL;) int read_flags = 0; const char *r; int i; @@ -13440,9 +13442,11 @@ readcmd(int argc UNUSED_PARAM, char **argv UNUSED_PARAM) case 'u': opt_u = optionarg; break; +#if BASH_READ_D case 'd': opt_d = optionarg; break; +#endif default: break; } @@ -13461,7 +13465,11 @@ readcmd(int argc UNUSED_PARAM, char **argv UNUSED_PARAM) opt_p, opt_t, opt_u, +#if BASH_READ_D opt_d +#else + NULL +#endif ); INT_ON; diff --git a/shell/hush.c b/shell/hush.c index e5e59c949..278b44a9c 100644 --- a/shell/hush.c +++ b/shell/hush.c @@ -352,6 +352,7 @@ #define BASH_SOURCE ENABLE_HUSH_BASH_COMPAT #define BASH_HOSTNAME_VAR ENABLE_HUSH_BASH_COMPAT #define BASH_TEST2 (ENABLE_HUSH_BASH_COMPAT && ENABLE_HUSH_TEST) +#define BASH_READ_D ENABLE_HUSH_BASH_COMPAT /* Build knobs */ @@ -9434,15 +9435,27 @@ static int FAST_FUNC builtin_read(char **argv) char *opt_p = NULL; char *opt_t = NULL; char *opt_u = NULL; +#if BASH_READ_D char *opt_d = NULL; +#endif const char *ifs; int read_flags; /* "!": do not abort on errors. * Option string must start with "sr" to match BUILTIN_READ_xxx */ - read_flags = getopt32(argv, "!srn:p:t:u:d:", &opt_n, &opt_p, &opt_t, - &opt_u, &opt_d); + read_flags = getopt32(argv, +#if BASH_READ_D + "!srn:p:t:u:d:", +#else + "!srn:p:t:u:", +#endif + &opt_n, &opt_p, &opt_t, + &opt_u +#if BASH_READ_D + , &opt_d +#endif + ); if (read_flags == (uint32_t)-1) return EXIT_FAILURE; argv += optind; @@ -9457,7 +9470,11 @@ static int FAST_FUNC builtin_read(char **argv) opt_p, opt_t, opt_u, +#if BASH_READ_D opt_d +#else + NULL +#endif ); if ((uintptr_t)r == 1 && errno == EINTR) { -- 2.14.0.windows.1.2.g0f3342804fc _______________________________________________ busybox mailing list busybox@busybox.net http://lists.busybox.net/mailman/listinfo/busybox