Imported from ../bash-2.05a.tar.gz.
This commit is contained in:
parent
28ef6c316f
commit
f73dda092b
303 changed files with 37069 additions and 28812 deletions
|
|
@ -71,9 +71,9 @@ $END
|
|||
#include "common.h"
|
||||
#include "builtext.h"
|
||||
|
||||
extern int variable_context, array_needs_making;
|
||||
extern int array_needs_making;
|
||||
|
||||
static int declare_internal ();
|
||||
static int declare_internal __P((register WORD_LIST *, int));
|
||||
|
||||
/* Declare or change variable attributes. */
|
||||
int
|
||||
|
|
@ -110,7 +110,7 @@ declare_internal (list, local_var)
|
|||
int local_var;
|
||||
{
|
||||
int flags_on, flags_off, *flags, any_failed, assign_error, pflag, nodefs;
|
||||
char *t;
|
||||
char *t, *subscript_start;
|
||||
SHELL_VAR *var;
|
||||
|
||||
flags_on = flags_off = any_failed = assign_error = pflag = nodefs = 0;
|
||||
|
|
@ -215,7 +215,7 @@ declare_internal (list, local_var)
|
|||
char *value, *name;
|
||||
int offset;
|
||||
#if defined (ARRAY_VARS)
|
||||
int making_array_special, assigning_array_special;
|
||||
int making_array_special, compound_array_assign, simple_array_assign;
|
||||
#endif
|
||||
|
||||
name = savestring (list->word->word);
|
||||
|
|
@ -230,9 +230,11 @@ declare_internal (list, local_var)
|
|||
value = "";
|
||||
|
||||
#if defined (ARRAY_VARS)
|
||||
assigning_array_special = 0;
|
||||
if (t = strchr (name, '['))
|
||||
compound_array_assign = simple_array_assign = 0;
|
||||
subscript_start = (char *)NULL;
|
||||
if (t = strchr (name, '[')) /* ] */
|
||||
{
|
||||
subscript_start = t;
|
||||
*t = '\0';
|
||||
making_array_special = 1;
|
||||
}
|
||||
|
|
@ -344,18 +346,12 @@ declare_internal (list, local_var)
|
|||
}
|
||||
|
||||
#if defined (ARRAY_VARS)
|
||||
/* declare -a name=value does not work; declare name=value when
|
||||
name is already an array does not work. */
|
||||
if ((making_array_special || (flags_on & att_array) || array_p (var)) && offset)
|
||||
{
|
||||
if (value[0] == '(' && strchr (value, ')'))
|
||||
assigning_array_special = 1;
|
||||
compound_array_assign = 1;
|
||||
else
|
||||
{
|
||||
builtin_error ("%s: cannot assign to array variables in this way", name);
|
||||
assign_error++;
|
||||
NEXT_VARIABLE ();
|
||||
}
|
||||
simple_array_assign = 1;
|
||||
}
|
||||
|
||||
/* Cannot use declare +a name to remove an array variable. */
|
||||
|
|
@ -375,8 +371,18 @@ declare_internal (list, local_var)
|
|||
VUNSETATTR (var, flags_off);
|
||||
|
||||
#if defined (ARRAY_VARS)
|
||||
if (offset && assigning_array_special)
|
||||
if (offset && compound_array_assign)
|
||||
assign_array_var_from_string (var, value);
|
||||
else if (simple_array_assign && subscript_start)
|
||||
{
|
||||
/* declare [-a] name[N]=value */
|
||||
*subscript_start = '['; /* ] */
|
||||
var = assign_array_element (name, value);
|
||||
*subscript_start = '\0';
|
||||
}
|
||||
else if (simple_array_assign)
|
||||
/* let bind_array_variable take care of this. */
|
||||
bind_array_variable (name, 0, value);
|
||||
else
|
||||
#endif
|
||||
/* bind_variable_value duplicates the essential internals of
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue