summaryrefslogtreecommitdiff
path: root/bin
diff options
context:
space:
mode:
authormartin <martin@NetBSD.org>2020-08-27 09:15:38 +0000
committermartin <martin@NetBSD.org>2020-08-27 09:15:38 +0000
commit428fce61ef67bcd3263dc7d6f63a1591ed0a6488 (patch)
tree5348e60951e8c728b8a5e8f2c80d5086cf30e1d7 /bin
parenta176fc262dff9fcda775550087bf65d227888258 (diff)
Pull up following revision(s) (requested by kre in ticket #1064):
bin/sh/exec.c: revision 1.54 PR bin/55526 Fix a bug that has existed since the "command" command was added in 2003. "command foo" would cause the definition of a function "foo" to be lost (not freed, simply discarded) if "foo" is (in addition to being a function) a filesystem command. The case where "foo" is a builtin was handled. For now, when a function exists with the same name as a filesystem command, the latter can never appear in the command hash table, and when used (which can only be via "command foo", just "foo" finds the function) will always result in a full PATH search. XXX pullup everything (from NetBSD 2.0 onwards). (really -8 and -9)
Diffstat (limited to 'bin')
-rw-r--r--bin/sh/exec.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/bin/sh/exec.c b/bin/sh/exec.c
index 674beb83b14..53e51bc60d4 100644
--- a/bin/sh/exec.c
+++ b/bin/sh/exec.c
@@ -1,4 +1,4 @@
-/* $NetBSD: exec.c,v 1.53 2018/07/25 14:42:50 kre Exp $ */
+/* $NetBSD: exec.c,v 1.53.2.1 2020/08/27 09:15:38 martin Exp $ */
/*-
* Copyright (c) 1991, 1993
@@ -37,7 +37,7 @@
#if 0
static char sccsid[] = "@(#)exec.c 8.4 (Berkeley) 6/8/95";
#else
-__RCSID("$NetBSD: exec.c,v 1.53 2018/07/25 14:42:50 kre Exp $");
+__RCSID("$NetBSD: exec.c,v 1.53.2.1 2020/08/27 09:15:38 martin Exp $");
#endif
#endif /* not lint */
@@ -667,6 +667,10 @@ loop:
cmdp = &loc_cmd;
} else
cmdp = cmdlookup(name, 1);
+
+ if (cmdp->cmdtype == CMDFUNCTION)
+ cmdp = &loc_cmd;
+
cmdp->cmdtype = CMDNORMAL;
cmdp->param.index = idx;
INTON;