From eb632d7676e92fd5750413ab6a6d16f3a6fda5c4 Mon Sep 17 00:00:00 2001 From: Paul Smith Date: Sun, 4 Mar 2012 08:09:09 +0000 Subject: Ensure appending private variables in pattern-specific target variables. Fixes Savannah bug #35468. --- expand.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'expand.c') diff --git a/expand.c b/expand.c index e9c376c..9514483 100644 --- a/expand.c +++ b/expand.c @@ -497,6 +497,8 @@ variable_append (const char *name, unsigned int length, { const struct variable *v; char *buf = 0; + /* If this set is local and the next is not a parent, then next is local. */ + int nextlocal = local && set->next_is_parent == 0; /* If there's nothing left to check, return the empty buffer. */ if (!set) @@ -507,12 +509,12 @@ variable_append (const char *name, unsigned int length, /* If there isn't one, or this one is private, try the set above us. */ if (!v || (!local && v->private_var)) - return variable_append (name, length, set->next, 0); + return variable_append (name, length, set->next, nextlocal); /* If this variable type is append, first get any upper values. If not, initialize the buffer. */ if (v->append) - buf = variable_append (name, length, set->next, 0); + buf = variable_append (name, length, set->next, nextlocal); else buf = initialize_variable_output (); -- cgit v1.2.3