mirror of
https://https.git.savannah.gnu.org/git/bash.git
synced 2026-06-28 07:59:50 +02:00
712 lines
20 KiB
Plaintext
712 lines
20 KiB
Plaintext
*** ../bash-3.0-patched/variables.c Wed Sep 8 11:07:44 2004
|
|
--- variables.c Fri Nov 5 21:17:42 2004
|
|
***************
|
|
*** 200,204 ****
|
|
static SHELL_VAR *new_shell_variable __P((const char *));
|
|
static SHELL_VAR *make_new_variable __P((const char *, HASH_TABLE *));
|
|
! static SHELL_VAR *bind_variable_internal __P((const char *, char *, HASH_TABLE *, int));
|
|
|
|
static void free_variable_hash_data __P((PTR_T));
|
|
--- 200,204 ----
|
|
static SHELL_VAR *new_shell_variable __P((const char *));
|
|
static SHELL_VAR *make_new_variable __P((const char *, HASH_TABLE *));
|
|
! static SHELL_VAR *bind_variable_internal __P((const char *, char *, HASH_TABLE *, int, int));
|
|
|
|
static void free_variable_hash_data __P((PTR_T));
|
|
***************
|
|
*** 321,325 ****
|
|
# if 0
|
|
/* Array variables may not yet be exported. */
|
|
! else if (*string == '(' && string[1] == '[' && xstrchr (string, ')'))
|
|
{
|
|
string_length = 1;
|
|
--- 321,325 ----
|
|
# if 0
|
|
/* Array variables may not yet be exported. */
|
|
! else if (*string == '(' && string[1] == '[' && string[strlen (string) - 1] == ')')
|
|
{
|
|
string_length = 1;
|
|
***************
|
|
*** 334,338 ****
|
|
else
|
|
{
|
|
! temp_var = bind_variable (name, string);
|
|
VSETATTR (temp_var, (att_exported | att_imported));
|
|
array_needs_making = 1;
|
|
--- 334,338 ----
|
|
else
|
|
{
|
|
! temp_var = bind_variable (name, string, 0);
|
|
VSETATTR (temp_var, (att_exported | att_imported));
|
|
array_needs_making = 1;
|
|
***************
|
|
*** 351,355 ****
|
|
|
|
/* Set up initial value of $_ */
|
|
! temp_var = bind_variable ("_", dollar_vars[0]);
|
|
|
|
/* Remember this pid. */
|
|
--- 351,355 ----
|
|
|
|
/* Set up initial value of $_ */
|
|
! temp_var = bind_variable ("_", dollar_vars[0], 0);
|
|
|
|
/* Remember this pid. */
|
|
***************
|
|
*** 373,377 ****
|
|
char node_name[22];
|
|
qnx_nidtostr (getnid (), node_name, sizeof (node_name));
|
|
! temp_var = bind_variable ("NODE", node_name);
|
|
set_auto_export (temp_var);
|
|
}
|
|
--- 373,377 ----
|
|
char node_name[22];
|
|
qnx_nidtostr (getnid (), node_name, sizeof (node_name));
|
|
! temp_var = bind_variable ("NODE", node_name, 0);
|
|
set_auto_export (temp_var);
|
|
}
|
|
***************
|
|
*** 393,397 ****
|
|
|
|
/* Don't allow IFS to be imported from the environment. */
|
|
! temp_var = bind_variable ("IFS", " \t\n");
|
|
setifs (temp_var);
|
|
|
|
--- 393,397 ----
|
|
|
|
/* Don't allow IFS to be imported from the environment. */
|
|
! temp_var = bind_variable ("IFS", " \t\n", 0);
|
|
setifs (temp_var);
|
|
|
|
***************
|
|
*** 412,418 ****
|
|
|
|
/* Initialize the `getopts' stuff. */
|
|
! bind_variable ("OPTIND", "1");
|
|
getopts_reset (0);
|
|
! bind_variable ("OPTERR", "1");
|
|
sh_opterr = 1;
|
|
|
|
--- 412,418 ----
|
|
|
|
/* Initialize the `getopts' stuff. */
|
|
! bind_variable ("OPTIND", "1", 0);
|
|
getopts_reset (0);
|
|
! bind_variable ("OPTERR", "1", 0);
|
|
sh_opterr = 1;
|
|
|
|
***************
|
|
*** 423,427 ****
|
|
to it. */
|
|
name = get_bash_name ();
|
|
! temp_var = bind_variable ("BASH", name);
|
|
free (name);
|
|
|
|
--- 423,427 ----
|
|
to it. */
|
|
name = get_bash_name ();
|
|
! temp_var = bind_variable ("BASH", name, 0);
|
|
free (name);
|
|
|
|
***************
|
|
*** 433,437 ****
|
|
|
|
/* Make a variable called BASH_VERSION which contains the version info. */
|
|
! bind_variable ("BASH_VERSION", shell_version_string ());
|
|
#if defined (ARRAY_VARS)
|
|
make_vers_array ();
|
|
--- 433,437 ----
|
|
|
|
/* Make a variable called BASH_VERSION which contains the version info. */
|
|
! bind_variable ("BASH_VERSION", shell_version_string (), 0);
|
|
#if defined (ARRAY_VARS)
|
|
make_vers_array ();
|
|
***************
|
|
*** 439,443 ****
|
|
|
|
if (command_execution_string)
|
|
! bind_variable ("BASH_EXECUTION_STRING", command_execution_string);
|
|
|
|
/* Find out if we're supposed to be in Posix.2 mode via an
|
|
--- 439,443 ----
|
|
|
|
if (command_execution_string)
|
|
! bind_variable ("BASH_EXECUTION_STRING", command_execution_string, 0);
|
|
|
|
/* Find out if we're supposed to be in Posix.2 mode via an
|
|
***************
|
|
*** 557,561 ****
|
|
temp_var = find_variable ("HOME");
|
|
if (temp_var == 0)
|
|
! temp_var = bind_variable ("HOME", sh_get_home_dir ());
|
|
#if 0
|
|
VSETATTR (temp_var, att_exported);
|
|
--- 557,561 ----
|
|
temp_var = find_variable ("HOME");
|
|
if (temp_var == 0)
|
|
! temp_var = bind_variable ("HOME", sh_get_home_dir (), 0);
|
|
#if 0
|
|
VSETATTR (temp_var, att_exported);
|
|
***************
|
|
*** 575,579 ****
|
|
if (current_user.shell == 0)
|
|
get_current_user_info ();
|
|
! temp_var = bind_variable ("SHELL", current_user.shell);
|
|
}
|
|
#if 0
|
|
--- 575,579 ----
|
|
if (current_user.shell == 0)
|
|
get_current_user_info ();
|
|
! temp_var = bind_variable ("SHELL", current_user.shell, 0);
|
|
}
|
|
#if 0
|
|
***************
|
|
*** 697,701 ****
|
|
}
|
|
|
|
! temp_var = bind_variable ("SHLVL", new_level);
|
|
set_auto_export (temp_var);
|
|
}
|
|
--- 697,701 ----
|
|
}
|
|
|
|
! temp_var = bind_variable ("SHLVL", new_level, 0);
|
|
set_auto_export (temp_var);
|
|
}
|
|
***************
|
|
*** 732,736 ****
|
|
{
|
|
set_working_directory (home_string);
|
|
! temp_var = bind_variable ("PWD", home_string);
|
|
set_auto_export (temp_var);
|
|
}
|
|
--- 732,736 ----
|
|
{
|
|
set_working_directory (home_string);
|
|
! temp_var = bind_variable ("PWD", home_string, 0);
|
|
set_auto_export (temp_var);
|
|
}
|
|
***************
|
|
*** 740,744 ****
|
|
if (temp_string)
|
|
{
|
|
! temp_var = bind_variable ("PWD", temp_string);
|
|
set_auto_export (temp_var);
|
|
free (temp_string);
|
|
--- 740,744 ----
|
|
if (temp_string)
|
|
{
|
|
! temp_var = bind_variable ("PWD", temp_string, 0);
|
|
set_auto_export (temp_var);
|
|
free (temp_string);
|
|
***************
|
|
*** 749,753 ****
|
|
`environment variable' and therefore should be auto-exported.
|
|
Make a dummy invisible variable for OLDPWD, and mark it as exported. */
|
|
! temp_var = bind_variable ("OLDPWD", (char *)NULL);
|
|
VSETATTR (temp_var, (att_exported | att_invisible));
|
|
}
|
|
--- 749,753 ----
|
|
`environment variable' and therefore should be auto-exported.
|
|
Make a dummy invisible variable for OLDPWD, and mark it as exported. */
|
|
! temp_var = bind_variable ("OLDPWD", (char *)NULL, 0);
|
|
VSETATTR (temp_var, (att_exported | att_invisible));
|
|
}
|
|
***************
|
|
*** 764,768 ****
|
|
if (temp_var)
|
|
VUNSETATTR (temp_var, (att_readonly | att_exported));
|
|
! temp_var = bind_variable ("PPID", name);
|
|
VSETATTR (temp_var, (att_readonly | att_integer));
|
|
}
|
|
--- 764,768 ----
|
|
if (temp_var)
|
|
VUNSETATTR (temp_var, (att_readonly | att_exported));
|
|
! temp_var = bind_variable ("PPID", name, 0);
|
|
VSETATTR (temp_var, (att_readonly | att_integer));
|
|
}
|
|
***************
|
|
*** 778,782 ****
|
|
if (v == 0)
|
|
{
|
|
! v = bind_variable ("UID", b);
|
|
VSETATTR (v, (att_readonly | att_integer));
|
|
}
|
|
--- 778,782 ----
|
|
if (v == 0)
|
|
{
|
|
! v = bind_variable ("UID", b, 0);
|
|
VSETATTR (v, (att_readonly | att_integer));
|
|
}
|
|
***************
|
|
*** 788,792 ****
|
|
if (v == 0)
|
|
{
|
|
! v = bind_variable ("EUID", b);
|
|
VSETATTR (v, (att_readonly | att_integer));
|
|
}
|
|
--- 788,792 ----
|
|
if (v == 0)
|
|
{
|
|
! v = bind_variable ("EUID", b, 0);
|
|
VSETATTR (v, (att_readonly | att_integer));
|
|
}
|
|
***************
|
|
*** 831,838 ****
|
|
|
|
v = inttostr (lines, val, sizeof (val));
|
|
! bind_variable ("LINES", v);
|
|
|
|
v = inttostr (cols, val, sizeof (val));
|
|
! bind_variable ("COLUMNS", v);
|
|
}
|
|
|
|
--- 831,838 ----
|
|
|
|
v = inttostr (lines, val, sizeof (val));
|
|
! bind_variable ("LINES", v, 0);
|
|
|
|
v = inttostr (cols, val, sizeof (val));
|
|
! bind_variable ("COLUMNS", v, 0);
|
|
}
|
|
|
|
***************
|
|
*** 984,988 ****
|
|
do \
|
|
{ \
|
|
! v = bind_variable (var, (val)); \
|
|
v->dynamic_value = gfunc; \
|
|
v->assign_func = afunc; \
|
|
--- 984,988 ----
|
|
do \
|
|
{ \
|
|
! v = bind_variable (var, (val), 0); \
|
|
v->dynamic_value = gfunc; \
|
|
v->assign_func = afunc; \
|
|
***************
|
|
*** 1229,1233 ****
|
|
char *p;
|
|
|
|
! p = savestring (the_printed_command_except_trap);
|
|
FREE (value_cell (var));
|
|
var_setvalue (var, p);
|
|
--- 1229,1240 ----
|
|
char *p;
|
|
|
|
!
|
|
! if (the_printed_command_except_trap)
|
|
! p = savestring (the_printed_command_except_trap);
|
|
! else
|
|
! {
|
|
! p = (char *)xmalloc (1);
|
|
! p[0] = '\0';
|
|
! }
|
|
FREE (value_cell (var));
|
|
var_setvalue (var, p);
|
|
***************
|
|
*** 1420,1428 ****
|
|
|
|
# if defined (DEBUGGER)
|
|
! v = init_dynamic_array_var ("BASH_ARGC", get_self, null_array_assign, att_noassign);
|
|
! v = init_dynamic_array_var ("BASH_ARGV", get_self, null_array_assign, att_noassign);
|
|
# endif /* DEBUGGER */
|
|
! v = init_dynamic_array_var ("BASH_SOURCE", get_self, null_array_assign, att_noassign);
|
|
! v = init_dynamic_array_var ("BASH_LINENO", get_self, null_array_assign, att_noassign);
|
|
#endif
|
|
|
|
--- 1427,1435 ----
|
|
|
|
# if defined (DEBUGGER)
|
|
! v = init_dynamic_array_var ("BASH_ARGC", get_self, null_array_assign, att_noassign|att_nounset);
|
|
! v = init_dynamic_array_var ("BASH_ARGV", get_self, null_array_assign, att_noassign|att_nounset);
|
|
# endif /* DEBUGGER */
|
|
! v = init_dynamic_array_var ("BASH_SOURCE", get_self, null_array_assign, att_noassign|att_nounset);
|
|
! v = init_dynamic_array_var ("BASH_LINENO", get_self, null_array_assign, att_noassign|att_nounset);
|
|
#endif
|
|
|
|
***************
|
|
*** 1583,1587 ****
|
|
v = find_variable (name);
|
|
if (v == 0)
|
|
! v = bind_variable_internal (name, value, global_variables->table, HASH_NOSRCH);
|
|
return (v);
|
|
}
|
|
--- 1590,1594 ----
|
|
v = find_variable (name);
|
|
if (v == 0)
|
|
! v = bind_variable_internal (name, value, global_variables->table, HASH_NOSRCH, 0);
|
|
return (v);
|
|
}
|
|
***************
|
|
*** 1637,1641 ****
|
|
|
|
if (old_var == 0)
|
|
! new_var = bind_variable_internal (name, "", vc->table, HASH_NOSRCH);
|
|
else
|
|
{
|
|
--- 1644,1648 ----
|
|
|
|
if (old_var == 0)
|
|
! new_var = bind_variable_internal (name, "", vc->table, HASH_NOSRCH, 0);
|
|
else
|
|
{
|
|
***************
|
|
*** 1752,1762 ****
|
|
|
|
char *
|
|
! make_variable_value (var, value)
|
|
SHELL_VAR *var;
|
|
char *value;
|
|
{
|
|
! char *retval;
|
|
! intmax_t lval;
|
|
! int expok;
|
|
|
|
/* If this variable has had its type set to integer (via `declare -i'),
|
|
--- 1759,1770 ----
|
|
|
|
char *
|
|
! make_variable_value (var, value, flags)
|
|
SHELL_VAR *var;
|
|
char *value;
|
|
+ int flags;
|
|
{
|
|
! char *retval, *oval;
|
|
! intmax_t lval, rval;
|
|
! int expok, olen;
|
|
|
|
/* If this variable has had its type set to integer (via `declare -i'),
|
|
***************
|
|
*** 1767,1778 ****
|
|
if (integer_p (var))
|
|
{
|
|
! lval = evalexp (value, &expok);
|
|
if (expok == 0)
|
|
jump_to_top_level (DISCARD);
|
|
! retval = itos (lval);
|
|
}
|
|
else if (value)
|
|
{
|
|
! if (*value)
|
|
retval = savestring (value);
|
|
else
|
|
--- 1775,1806 ----
|
|
if (integer_p (var))
|
|
{
|
|
! if (flags & ASS_APPEND)
|
|
! {
|
|
! oval = value_cell (var);
|
|
! lval = evalexp (oval, &expok); /* ksh93 seems to do this */
|
|
! if (expok == 0)
|
|
! jump_to_top_level (DISCARD);
|
|
! }
|
|
! rval = evalexp (value, &expok);
|
|
if (expok == 0)
|
|
jump_to_top_level (DISCARD);
|
|
! if (flags & ASS_APPEND)
|
|
! rval += lval;
|
|
! retval = itos (rval);
|
|
}
|
|
else if (value)
|
|
{
|
|
! if (flags & ASS_APPEND)
|
|
! {
|
|
! oval = value_cell (var);
|
|
! if (oval == 0) /* paranoia */
|
|
! oval = "";
|
|
! olen = STRLEN (oval);
|
|
! retval = (char *)xmalloc (olen + (value ? STRLEN (value) : 0) + 1);
|
|
! strcpy (retval, oval);
|
|
! if (value)
|
|
! strcpy (retval+olen, value);
|
|
! }
|
|
! else if (*value)
|
|
retval = savestring (value);
|
|
else
|
|
***************
|
|
*** 1791,1799 ****
|
|
temporary environment (but usually is not). */
|
|
static SHELL_VAR *
|
|
! bind_variable_internal (name, value, table, hflags)
|
|
const char *name;
|
|
char *value;
|
|
HASH_TABLE *table;
|
|
! int hflags;
|
|
{
|
|
char *newval;
|
|
--- 1819,1827 ----
|
|
temporary environment (but usually is not). */
|
|
static SHELL_VAR *
|
|
! bind_variable_internal (name, value, table, hflags, aflags)
|
|
const char *name;
|
|
char *value;
|
|
HASH_TABLE *table;
|
|
! int hflags, aflags;
|
|
{
|
|
char *newval;
|
|
***************
|
|
*** 1805,1809 ****
|
|
{
|
|
entry = make_new_variable (name, table);
|
|
! var_setvalue (entry, make_variable_value (entry, value));
|
|
}
|
|
else if (entry->assign_func) /* array vars have assign functions now */
|
|
--- 1833,1837 ----
|
|
{
|
|
entry = make_new_variable (name, table);
|
|
! var_setvalue (entry, make_variable_value (entry, value, 0)); /* XXX */
|
|
}
|
|
else if (entry->assign_func) /* array vars have assign functions now */
|
|
***************
|
|
*** 1824,1828 ****
|
|
VUNSETATTR (entry, att_invisible);
|
|
|
|
! newval = make_variable_value (entry, value);
|
|
|
|
/* Invalidate any cached export string */
|
|
--- 1852,1856 ----
|
|
VUNSETATTR (entry, att_invisible);
|
|
|
|
! newval = make_variable_value (entry, value, aflags); /* XXX */
|
|
|
|
/* Invalidate any cached export string */
|
|
***************
|
|
*** 1861,1867 ****
|
|
|
|
SHELL_VAR *
|
|
! bind_variable (name, value)
|
|
const char *name;
|
|
char *value;
|
|
{
|
|
SHELL_VAR *v;
|
|
--- 1889,1896 ----
|
|
|
|
SHELL_VAR *
|
|
! bind_variable (name, value, flags)
|
|
const char *name;
|
|
char *value;
|
|
+ int flags;
|
|
{
|
|
SHELL_VAR *v;
|
|
***************
|
|
*** 1890,1897 ****
|
|
v = hash_lookup (name, vc->table);
|
|
if (v)
|
|
! return (bind_variable_internal (name, value, vc->table, 0));
|
|
}
|
|
}
|
|
! return (bind_variable_internal (name, value, global_variables->table, 0));
|
|
}
|
|
|
|
--- 1919,1926 ----
|
|
v = hash_lookup (name, vc->table);
|
|
if (v)
|
|
! return (bind_variable_internal (name, value, vc->table, 0, flags));
|
|
}
|
|
}
|
|
! return (bind_variable_internal (name, value, global_variables->table, 0, flags));
|
|
}
|
|
|
|
***************
|
|
*** 1902,1908 ****
|
|
and note that the export environment needs to be recreated. */
|
|
SHELL_VAR *
|
|
! bind_variable_value (var, value)
|
|
SHELL_VAR *var;
|
|
char *value;
|
|
{
|
|
char *t;
|
|
--- 1931,1938 ----
|
|
and note that the export environment needs to be recreated. */
|
|
SHELL_VAR *
|
|
! bind_variable_value (var, value, aflags)
|
|
SHELL_VAR *var;
|
|
char *value;
|
|
+ int aflags;
|
|
{
|
|
char *t;
|
|
***************
|
|
*** 1910,1914 ****
|
|
VUNSETATTR (var, att_invisible);
|
|
|
|
! t = make_variable_value (var, value);
|
|
FREE (value_cell (var));
|
|
var_setvalue (var, t);
|
|
--- 1940,1944 ----
|
|
VUNSETATTR (var, att_invisible);
|
|
|
|
! t = make_variable_value (var, value, aflags);
|
|
FREE (value_cell (var));
|
|
var_setvalue (var, t);
|
|
***************
|
|
*** 1966,1973 ****
|
|
#if defined (ARRAY_VARS)
|
|
if (isarr)
|
|
! v = assign_array_element (lhs, rhs);
|
|
else
|
|
#endif
|
|
! v = bind_variable (lhs, rhs);
|
|
|
|
if (isint)
|
|
--- 1996,2003 ----
|
|
#if defined (ARRAY_VARS)
|
|
if (isarr)
|
|
! v = assign_array_element (lhs, rhs, 0);
|
|
else
|
|
#endif
|
|
! v = bind_variable (lhs, rhs, 0);
|
|
|
|
if (isint)
|
|
***************
|
|
*** 2068,2077 ****
|
|
temporary environments. The expansion code in subst.c calls this. */
|
|
int
|
|
! assign_in_env (string)
|
|
! const char *string;
|
|
{
|
|
int offset;
|
|
char *name, *temp, *value;
|
|
SHELL_VAR *var;
|
|
|
|
offset = assignment (string, 0);
|
|
--- 2098,2110 ----
|
|
temporary environments. The expansion code in subst.c calls this. */
|
|
int
|
|
! assign_in_env (word)
|
|
! WORD_DESC *word;
|
|
{
|
|
int offset;
|
|
char *name, *temp, *value;
|
|
SHELL_VAR *var;
|
|
+ const char *string;
|
|
+
|
|
+ string = word->word;
|
|
|
|
offset = assignment (string, 0);
|
|
***************
|
|
*** 2083,2086 ****
|
|
--- 2116,2123 ----
|
|
name[offset] = 0;
|
|
|
|
+ /* ignore the `+' when assigning temporary environment */
|
|
+ if (name[offset - 1] == '+')
|
|
+ name[offset - 1] = '\0';
|
|
+
|
|
var = find_variable (name);
|
|
if (var && (readonly_p (var) || noassign_p (var)))
|
|
***************
|
|
*** 2093,2100 ****
|
|
|
|
temp = name + offset + 1;
|
|
temp = (xstrchr (temp, '~') != 0) ? bash_tilde_expand (temp, 1) : savestring (temp);
|
|
-
|
|
value = expand_string_unsplit_to_string (temp, 0);
|
|
free (temp);
|
|
}
|
|
|
|
--- 2130,2140 ----
|
|
|
|
temp = name + offset + 1;
|
|
+ #if 0
|
|
temp = (xstrchr (temp, '~') != 0) ? bash_tilde_expand (temp, 1) : savestring (temp);
|
|
value = expand_string_unsplit_to_string (temp, 0);
|
|
free (temp);
|
|
+ #else
|
|
+ value = expand_assignment_string_to_string (temp, 0);
|
|
+ #endif
|
|
}
|
|
|
|
***************
|
|
*** 2306,2309 ****
|
|
--- 2346,2355 ----
|
|
if (old_var && local_p (old_var) && variable_context == old_var->context)
|
|
{
|
|
+ #if defined (ARRAY_VARS)
|
|
+ if (array_p (old_var))
|
|
+ array_dispose (array_cell (old_var));
|
|
+ else
|
|
+ #endif
|
|
+ FREE (value_cell (old_var));
|
|
/* Reset the attributes. Preserve the export attribute if the variable
|
|
came from a temporary environment. Make sure it stays local, and
|
|
***************
|
|
*** 2312,2316 ****
|
|
VSETATTR (old_var, att_local);
|
|
VSETATTR (old_var, att_invisible);
|
|
- FREE (value_cell (old_var));
|
|
var_setvalue (old_var, (char *)NULL);
|
|
INVALIDATE_EXPORTSTR (old_var);
|
|
--- 2358,2361 ----
|
|
***************
|
|
*** 2390,2394 ****
|
|
if (!entry) \
|
|
{ \
|
|
! entry = bind_variable (name, ""); \
|
|
if (!no_invisible_vars) entry->attributes |= att_invisible; \
|
|
} \
|
|
--- 2435,2439 ----
|
|
if (!entry) \
|
|
{ \
|
|
! entry = bind_variable (name, "", 0); \
|
|
if (!no_invisible_vars) entry->attributes |= att_invisible; \
|
|
} \
|
|
***************
|
|
*** 2832,2836 ****
|
|
}
|
|
|
|
! v = bind_variable_internal (var->name, value_cell (var), binding_table, 0);
|
|
|
|
/* XXX - should we set the context here? It shouldn't matter because of how
|
|
--- 2877,2881 ----
|
|
}
|
|
|
|
! v = bind_variable_internal (var->name, value_cell (var), binding_table, 0, 0);
|
|
|
|
/* XXX - should we set the context here? It shouldn't matter because of how
|
|
***************
|
|
*** 3350,3354 ****
|
|
{
|
|
/* XXX - should we set v->context here? */
|
|
! v = bind_variable_internal (var->name, value_cell (var), shell_variables->table, 0);
|
|
if (shell_variables == global_variables)
|
|
var->attributes &= ~(att_tempvar|att_propagate);
|
|
--- 3395,3399 ----
|
|
{
|
|
/* XXX - should we set v->context here? */
|
|
! v = bind_variable_internal (var->name, value_cell (var), shell_variables->table, 0, 0);
|
|
if (shell_variables == global_variables)
|
|
var->attributes &= ~(att_tempvar|att_propagate);
|
|
***************
|
|
*** 3429,3436 ****
|
|
/* If a temp var had its export attribute set, or it's marked to be
|
|
propagated, bind it in the previous scope before disposing it. */
|
|
if (exported_p (var) || (var->attributes & att_propagate))
|
|
{
|
|
var->attributes &= ~att_tempvar; /* XXX */
|
|
! v = bind_variable_internal (var->name, value_cell (var), shell_variables->table, 0);
|
|
if (shell_variables == global_variables)
|
|
var->attributes &= ~att_propagate;
|
|
--- 3474,3487 ----
|
|
/* If a temp var had its export attribute set, or it's marked to be
|
|
propagated, bind it in the previous scope before disposing it. */
|
|
+ /* XXX - This isn't exactly right, because all tempenv variables have the
|
|
+ export attribute set. */
|
|
+ #if 0
|
|
if (exported_p (var) || (var->attributes & att_propagate))
|
|
+ #else
|
|
+ if (tempvar_p (var) && exported_p (var) && (var->attributes & att_propagate))
|
|
+ #endif
|
|
{
|
|
var->attributes &= ~att_tempvar; /* XXX */
|
|
! v = bind_variable_internal (var->name, value_cell (var), shell_variables->table, 0, 0);
|
|
if (shell_variables == global_variables)
|
|
var->attributes &= ~att_propagate;
|
|
***************
|
|
*** 3650,3653 ****
|
|
--- 3701,3705 ----
|
|
{ "LC_MESSAGES", sv_locale },
|
|
{ "LC_NUMERIC", sv_locale },
|
|
+ { "LC_TIME", sv_locale },
|
|
|
|
{ "MAIL", sv_mail },
|