mirror of
https://https.git.savannah.gnu.org/git/bash.git
synced 2026-06-26 23:33:08 +02:00
commit bash-20090806 snapshot
This commit is contained in:
+20
-5
@@ -447,7 +447,7 @@ assign_compound_array_list (var, nlist, flags)
|
||||
/* We have a word of the form [ind]=value */
|
||||
if ((list->word->flags & W_ASSIGNMENT) && w[0] == '[')
|
||||
{
|
||||
len = skipsubscript (w, 0);
|
||||
len = skipsubscript (w, 0, assoc_p (var) != 0);
|
||||
|
||||
/* XXX - changes for `+=' */
|
||||
if (w[len] != ']' || (w[len+1] != '=' && (w[len+1] != '+' || w[len+2] != '=')))
|
||||
@@ -560,8 +560,9 @@ quote_assign (string)
|
||||
{
|
||||
size_t slen;
|
||||
int saw_eq;
|
||||
char *temp, *t;
|
||||
char *temp, *t, *subs;
|
||||
const char *s, *send;
|
||||
int ss, se;
|
||||
DECLARE_MBSTATE;
|
||||
|
||||
slen = strlen (string);
|
||||
@@ -573,6 +574,20 @@ quote_assign (string)
|
||||
{
|
||||
if (*s == '=')
|
||||
saw_eq = 1;
|
||||
if (saw_eq == 0 && *s == '[') /* looks like a subscript */
|
||||
{
|
||||
ss = s - string;
|
||||
se = skipsubscript (string, ss, 0);
|
||||
subs = substring (s, ss, se);
|
||||
*t++ = '\\';
|
||||
strcpy (t, subs);
|
||||
t += se - ss;
|
||||
*t++ = '\\';
|
||||
*t++ = ']';
|
||||
s += se + 1;
|
||||
free (subs);
|
||||
continue;
|
||||
}
|
||||
if (saw_eq == 0 && (glob_char_p (s) || isifs (*s)))
|
||||
*t++ = '\\';
|
||||
|
||||
@@ -619,7 +634,7 @@ unbind_array_element (var, sub)
|
||||
char *akey;
|
||||
ARRAY_ELEMENT *ae;
|
||||
|
||||
len = skipsubscript (sub, 0);
|
||||
len = skipsubscript (sub, 0, 0);
|
||||
if (sub[len] != ']' || len == 0)
|
||||
{
|
||||
builtin_error ("%s[%s: %s", var->name, sub, _(bash_badsub_errmsg));
|
||||
@@ -722,7 +737,7 @@ valid_array_reference (name)
|
||||
if (r == 0)
|
||||
return 0;
|
||||
/* Check for a properly-terminated non-blank subscript. */
|
||||
len = skipsubscript (t, 0);
|
||||
len = skipsubscript (t, 0, 0);
|
||||
if (t[len] != ']' || len == 1)
|
||||
return 0;
|
||||
for (r = 1; r < len; r++)
|
||||
@@ -783,7 +798,7 @@ array_variable_name (s, subp, lenp)
|
||||
return ((char *)NULL);
|
||||
}
|
||||
ind = t - s;
|
||||
ni = skipsubscript (s, ind);
|
||||
ni = skipsubscript (s, ind, 0);
|
||||
if (ni <= ind + 1 || s[ni] != ']')
|
||||
{
|
||||
err_badarraysub (s);
|
||||
|
||||
Reference in New Issue
Block a user