Imported from ../bash-2.05a.tar.gz.

This commit is contained in:
Jari Aalto 2001-11-13 17:56:06 +00:00
commit f73dda092b
303 changed files with 37069 additions and 28812 deletions

View file

@ -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