diff options
author | Denys Vlasenko <vda.linux@googlemail.com> | 2020-02-17 16:20:05 +0100 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2020-02-17 16:20:05 +0100 |
commit | 22c75924daa41b7ea097796afd4baafa2fc99d05 (patch) | |
tree | 8e57f30bb01cf0356344c27b5c78d4c3d72c776c /shell | |
parent | 6c4f87e411aa5375eaea5a5909a5c610e38c7e70 (diff) | |
download | busybox-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.c | 13 |
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) { |