[git commit] ash: [EVAL] Let funcnode refer to a function definition, not its first command

Denys Vlasenko vda.linux at googlemail.com
Tue Oct 25 18:26:02 UTC 2016


commit: https://git.busybox.net/busybox/commit/?id=7aec86820d7bcf2842d167969c4fa7159ea643f7
branch: https://git.busybox.net/busybox/commit/?id=refs/heads/master

Upstream patch:

    Date: Tue, 15 Mar 2011 15:44:47 +0800
    [EVAL] Let funcnode refer to a function definition, not its first command

    It is not unrelated: I changed the meaning of struct funcnode's field n
    to refer to the function definition, rather than the list of the
    function's commands, because I needed to refer to the function
    definition node from evalfun, which only gets passed a funcnode. But it
    is something that could be applied independently (without being useful
    by itself), so I've attached it as a separate patch for easier review.

    Signed-off-by: Harald van Dijk <harald at gigawatt.nl>
    Signed-off-by: Herbert Xu <herbert at gondor.apana.org.au>

Signed-off-by: Denys Vlasenko <vda.linux at googlemail.com>
---
 shell/ash.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/shell/ash.c b/shell/ash.c
index 8092e39..b7f20ba 100644
--- a/shell/ash.c
+++ b/shell/ash.c
@@ -8449,14 +8449,14 @@ copyfunc(union node *n)
  * Define a shell function.
  */
 static void
-defun(char *name, union node *func)
+defun(union node *func)
 {
 	struct cmdentry entry;
 
 	INT_OFF;
 	entry.cmdtype = CMDFUNCTION;
 	entry.u.func = copyfunc(func);
-	addcmdentry(name, &entry);
+	addcmdentry(func->narg.text, &entry);
 	INT_ON;
 }
 
@@ -8654,7 +8654,7 @@ evaltree(union node *n, int flags)
 		status = 0;
 		goto setstatus;
 	case NDEFUN:
-		defun(n->narg.text, n->narg.next);
+		defun(n);
 		/* Not necessary. To test it:
 		 * "false; f() { qwerty; }; echo $?" should print 0.
 		 */
@@ -9079,7 +9079,7 @@ evalfun(struct funcnode *func, int argc, char **argv, int flags)
 	shellparam.optind = 1;
 	shellparam.optoff = -1;
 #endif
-	evaltree(&func->n, flags & EV_TESTED);
+	evaltree(func->n.narg.next, flags & EV_TESTED);
  funcdone:
 	INT_OFF;
 	funcnest--;


More information about the busybox-cvs mailing list