aboutsummaryrefslogtreecommitdiff
path: root/shell
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2020-02-17 16:20:05 +0100
committerDenys Vlasenko <vda.linux@googlemail.com>2020-02-17 16:20:05 +0100
commit22c75924daa41b7ea097796afd4baafa2fc99d05 (patch)
tree8e57f30bb01cf0356344c27b5c78d4c3d72c776c /shell
parent6c4f87e411aa5375eaea5a5909a5c610e38c7e70 (diff)
downloadbusybox-w32-22c75924daa41b7ea097796afd4baafa2fc99d05.tar.gz
busybox-w32-22c75924daa41b7ea097796afd4baafa2fc99d05.tar.bz2
busybox-w32-22c75924daa41b7ea097796afd4baafa2fc99d05.zip
ash: exec: Never rehash regular built-ins
Upstream commit: Date: Sat, 19 May 2018 02:39:51 +0800 exec: Never rehash regular built-ins As regular (including special) built-ins can never be overridden, we should never remove them from the hash table. Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'shell')
-rw-r--r--shell/ash.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/shell/ash.c b/shell/ash.c
index c383cccda..389db3cd0 100644
--- a/shell/ash.c
+++ b/shell/ash.c
@@ -8284,7 +8284,10 @@ clearcmdentry(void)
8284 pp = tblp; 8284 pp = tblp;
8285 while ((cmdp = *pp) != NULL) { 8285 while ((cmdp = *pp) != NULL) {
8286 if (cmdp->cmdtype == CMDNORMAL 8286 if (cmdp->cmdtype == CMDNORMAL
8287 || (cmdp->cmdtype == CMDBUILTIN && builtinloc > 0) 8287 || (cmdp->cmdtype == CMDBUILTIN
8288 && !IS_BUILTIN_REGULAR(cmdp->param.cmd)
8289 && builtinloc > 0
8290 )
8288 ) { 8291 ) {
8289 *pp = cmdp->next; 8292 *pp = cmdp->next;
8290 free(cmdp); 8293 free(cmdp);
@@ -8403,7 +8406,11 @@ hashcmd(int argc UNUSED_PARAM, char **argv UNUSED_PARAM)
8403 cmdp = cmdlookup(name, 0); 8406 cmdp = cmdlookup(name, 0);
8404 if (cmdp != NULL 8407 if (cmdp != NULL
8405 && (cmdp->cmdtype == CMDNORMAL 8408 && (cmdp->cmdtype == CMDNORMAL
8406 || (cmdp->cmdtype == CMDBUILTIN && builtinloc >= 0)) 8409 || (cmdp->cmdtype == CMDBUILTIN
8410 && !IS_BUILTIN_REGULAR(cmdp->param.cmd)
8411 && builtinloc > 0
8412 )
8413 )
8407 ) { 8414 ) {
8408 delete_cmd_entry(); 8415 delete_cmd_entry();
8409 } 8416 }
@@ -13556,7 +13563,7 @@ find_command(char *name, struct cmdentry *entry, int act, const char *path)
13556 bit = DO_NOFUNC; 13563 bit = DO_NOFUNC;
13557 break; 13564 break;
13558 case CMDBUILTIN: 13565 case CMDBUILTIN:
13559 bit = DO_ALTBLTIN; 13566 bit = IS_BUILTIN_REGULAR(cmdp->param.cmd) ? 0 : DO_ALTBLTIN;
13560 break; 13567 break;
13561 } 13568 }
13562 if (act & bit) { 13569 if (act & bit) {