aboutsummaryrefslogtreecommitdiff
path: root/shell
diff options
context:
space:
mode:
authorRon Yorston <rmy@pobox.com>2023-04-17 07:32:52 +0100
committerRon Yorston <rmy@pobox.com>2023-04-17 07:32:52 +0100
commit8cdeb571cfbf3bb6edc44779e46537b072b8cd08 (patch)
tree9f3ad1d205418197bc53348b61f702602229a90d /shell
parent41827dd448c001b52b4f0e591ea605cb5de1d230 (diff)
parentd2b81b3dc2b31d32e1060d3ea8bd998d30a37d8a (diff)
downloadbusybox-w32-8cdeb571cfbf3bb6edc44779e46537b072b8cd08.tar.gz
busybox-w32-8cdeb571cfbf3bb6edc44779e46537b072b8cd08.tar.bz2
busybox-w32-8cdeb571cfbf3bb6edc44779e46537b072b8cd08.zip
Merge branch 'busybox' into merge
Diffstat (limited to 'shell')
-rw-r--r--shell/ash.c32
-rw-r--r--shell/hush.c33
-rw-r--r--shell/hush_test/hush-misc/export-n.right4
3 files changed, 59 insertions, 10 deletions
diff --git a/shell/ash.c b/shell/ash.c
index 3eb9d5852..28f4ec47d 100644
--- a/shell/ash.c
+++ b/shell/ash.c
@@ -10696,7 +10696,7 @@ evalpipe(union node *n, int flags)
10696 10696
10697/* setinteractive needs this forward reference */ 10697/* setinteractive needs this forward reference */
10698#if ENABLE_FEATURE_TAB_COMPLETION 10698#if ENABLE_FEATURE_TAB_COMPLETION
10699static const char *get_builtin_name(int i) FAST_FUNC; 10699static const char *ash_command_name(int i) FAST_FUNC;
10700#endif 10700#endif
10701 10701
10702/* 10702/*
@@ -10733,7 +10733,7 @@ setinteractive(int on)
10733 if (!line_input_state) { 10733 if (!line_input_state) {
10734 line_input_state = new_line_input_t(FOR_SHELL | WITH_PATH_LOOKUP); 10734 line_input_state = new_line_input_t(FOR_SHELL | WITH_PATH_LOOKUP);
10735# if ENABLE_FEATURE_TAB_COMPLETION 10735# if ENABLE_FEATURE_TAB_COMPLETION
10736 line_input_state->get_exe_name = get_builtin_name; 10736 line_input_state->get_exe_name = ash_command_name;
10737# endif 10737# endif
10738# if EDITING_HAS_sh_get_var 10738# if EDITING_HAS_sh_get_var
10739 line_input_state->sh_get_var = lookupvar; 10739 line_input_state->sh_get_var = lookupvar;
@@ -11252,9 +11252,33 @@ find_builtin(const char *name)
11252 11252
11253#if ENABLE_FEATURE_TAB_COMPLETION 11253#if ENABLE_FEATURE_TAB_COMPLETION
11254static const char * FAST_FUNC 11254static const char * FAST_FUNC
11255get_builtin_name(int i) 11255ash_command_name(int i)
11256{ 11256{
11257 return /*i >= 0 &&*/ i < ARRAY_SIZE(builtintab) ? builtintab[i].name + 1 : NULL; 11257 int n;
11258
11259 if (/*i >= 0 &&*/ i < ARRAY_SIZE(builtintab))
11260 return builtintab[i].name + 1;
11261 i -= ARRAY_SIZE(builtintab);
11262
11263 for (n = 0; n < CMDTABLESIZE; n++) {
11264 struct tblentry *cmdp;
11265 for (cmdp = cmdtable[n]; cmdp; cmdp = cmdp->next) {
11266 if (cmdp->cmdtype == CMDFUNCTION && --i < 0)
11267 return cmdp->cmdname;
11268 }
11269 }
11270
11271# if ENABLE_ASH_ALIAS
11272 for (n = 0; n < ATABSIZE; n++) {
11273 struct alias *ap;
11274 for (ap = atab[n]; ap; ap = ap->next) {
11275 if (--i < 0)
11276 return ap->name;
11277 }
11278 }
11279#endif
11280
11281 return NULL;
11258} 11282}
11259#endif 11283#endif
11260 11284
diff --git a/shell/hush.c b/shell/hush.c
index a938cc790..f8951d084 100644
--- a/shell/hush.c
+++ b/shell/hush.c
@@ -8220,7 +8220,7 @@ static const struct built_in_command *find_builtin(const char *name)
8220} 8220}
8221 8221
8222#if ENABLE_HUSH_JOB && ENABLE_FEATURE_TAB_COMPLETION 8222#if ENABLE_HUSH_JOB && ENABLE_FEATURE_TAB_COMPLETION
8223static const char * FAST_FUNC get_builtin_name(int i) 8223static const char * FAST_FUNC hush_command_name(int i)
8224{ 8224{
8225 if (/*i >= 0 && */ i < ARRAY_SIZE(bltins1)) { 8225 if (/*i >= 0 && */ i < ARRAY_SIZE(bltins1)) {
8226 return bltins1[i].b_cmd; 8226 return bltins1[i].b_cmd;
@@ -8229,6 +8229,16 @@ static const char * FAST_FUNC get_builtin_name(int i)
8229 if (i < ARRAY_SIZE(bltins2)) { 8229 if (i < ARRAY_SIZE(bltins2)) {
8230 return bltins2[i].b_cmd; 8230 return bltins2[i].b_cmd;
8231 } 8231 }
8232# if ENABLE_HUSH_FUNCTIONS
8233 {
8234 struct function *funcp;
8235 i -= ARRAY_SIZE(bltins2);
8236 for (funcp = G.top_func; funcp; funcp = funcp->next) {
8237 if (--i < 0)
8238 return funcp->name;
8239 }
8240 }
8241# endif
8232 return NULL; 8242 return NULL;
8233} 8243}
8234#endif 8244#endif
@@ -10716,7 +10726,7 @@ int hush_main(int argc, char **argv)
10716# if ENABLE_FEATURE_EDITING 10726# if ENABLE_FEATURE_EDITING
10717 G.line_input_state = new_line_input_t(FOR_SHELL); 10727 G.line_input_state = new_line_input_t(FOR_SHELL);
10718# if ENABLE_FEATURE_TAB_COMPLETION 10728# if ENABLE_FEATURE_TAB_COMPLETION
10719 G.line_input_state->get_exe_name = get_builtin_name; 10729 G.line_input_state->get_exe_name = hush_command_name;
10720# endif 10730# endif
10721# if EDITING_HAS_sh_get_var 10731# if EDITING_HAS_sh_get_var
10722 G.line_input_state->sh_get_var = get_local_var_value; 10732 G.line_input_state->sh_get_var = get_local_var_value;
@@ -11147,6 +11157,12 @@ static int FAST_FUNC builtin_umask(char **argv)
11147#if ENABLE_HUSH_EXPORT || ENABLE_HUSH_TRAP 11157#if ENABLE_HUSH_EXPORT || ENABLE_HUSH_TRAP
11148static void print_escaped(const char *s) 11158static void print_escaped(const char *s)
11149{ 11159{
11160//TODO? bash "set" does not quote variables which contain only alnums and "%+,-./:=@_~",
11161// (but "export" quotes all variables, even with only these chars).
11162// I think quoting strings with %+,=~ looks better
11163// (example: "set" printing var== instead of var='=' looks strange)
11164// IOW: do not quote "-./:@_": / is used in pathnames, : in PATH, -._ often in file names, @ in emails
11165
11150 if (*s == '\'') 11166 if (*s == '\'')
11151 goto squote; 11167 goto squote;
11152 do { 11168 do {
@@ -11401,8 +11417,17 @@ static int FAST_FUNC builtin_set(char **argv)
11401 11417
11402 if (arg == NULL) { 11418 if (arg == NULL) {
11403 struct variable *e; 11419 struct variable *e;
11404 for (e = G.top_var; e; e = e->next) 11420 for (e = G.top_var; e; e = e->next) {
11405 puts(e->varstr); 11421 const char *s = e->varstr;
11422 const char *p = strchr(s, '=');
11423
11424 if (!p) /* wtf? take next variable */
11425 continue;
11426 /* var= */
11427 printf("%.*s", (int)(p - s) + 1, s);
11428 print_escaped(p + 1);
11429 putchar('\n');
11430 }
11406 return EXIT_SUCCESS; 11431 return EXIT_SUCCESS;
11407 } 11432 }
11408 11433
diff --git a/shell/hush_test/hush-misc/export-n.right b/shell/hush_test/hush-misc/export-n.right
index 3d55bf752..6079a0124 100644
--- a/shell/hush_test/hush-misc/export-n.right
+++ b/shell/hush_test/hush-misc/export-n.right
@@ -2,8 +2,8 @@ export aaa1="'''"
2export aaa2='' 2export aaa2=''
3export aaa3="'''"'abc' 3export aaa3="'''"'abc'
4export aaa8='8' 4export aaa8='8'
5aaa9=9 5aaa9='9'
6aaa10=10 6aaa10='10'
7Nothing: 7Nothing:
8Nothing: 8Nothing:
9Nothing: 9Nothing: