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 | |
| 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>
| -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) { |
