commit bash-20091105 snapshot

This commit is contained in:
Chet Ramey
2011-12-08 20:19:59 -05:00
parent 6bf8a8a76a
commit 2695f55d81
16 changed files with 7710 additions and 46 deletions
+55
View File
@@ -1,3 +1,58 @@
This document details the changes between this version, bash-4.1-beta,
and the previous version, bash-4.1-alpha.
1. Changes to Bash
a. Fixed a bug in mapfile that caused the shell to crash if it was passed the
name of an associative array.
b. Fixed a bug that caused the shell to incorrectly split case patterns if
they contained characters in $IFS.
c. Fixed a bug that caused the shell to set $? to the wrong value when using
a construct ending with a variable assignment with set -x enabled and PS4
containing a command substitution.
d. Fixed a bug that caused the shell to read commands incorrectly if an
expansion error occurred under certain conditions in a user-specified
subshell.
e. Fixed a bug that caused the shell to set $? incorrectly if a parse error
occurred in an evaluation context ("eval", trap command, dot script, etc.)
f. Fixed a bug that caused the shell to attempt command substitution
completion within a single-quoted string.
g. Fixed a bug that caused the shell to insert an extra single quote during
word completion.
h. Fixed a bug that caused the shell to crash if invoked with the environment
variable EMACS having a null value.
i. Fixed a bug that caused bash to incorrectly report the presence of new
mail in a `maildir' environment.
j. Fixed a bug that caused the shell to not recognize a here-document ending
delimiter inside a command substitution.
k. Fixed a bug that caused the shell to crash when a a dynamic array variable
was assigned a scalar value.
2. Changes to Readline
3. New Features in Bash
a. The mapfile/readarray builtin no longer stores the commands it invokes via
callbacks in the history list.
b. There is a new `compat40' shopt option.
c. The < and > operators to [[ do string comparisons using the current locale
only if the compatibility level is greater than 40 (set to 41 by default).
4. New Features in Readline
------------------------------------------------------------------------------
This document details the changes between this version, bash-4.1-alpha,
and the previous version, bash-4.0-release.
+65 -1
View File
@@ -117,7 +117,30 @@ jj. Fixed a bug that caused variable expansion in here documents to look in
kk. Bash and readline can now convert file names between precomposed and
decomposed Unicode on Mac OS X ("keyboard" and file system forms,
respectively). This affects filename completion (using new
rl_filename_rewrite_hook) and globbing.
rl_filename_rewrite_hook), globbing, and readline redisplay.
ll. The ERR and EXIT traps now see a non-zero value for $? when a parser
error after set -e has been enabled causes the shell to exit.
mm. Fixed a bug that in brace expansion that caused zero-prefixed terms to
not contain the correct number of digits.
nn. Fixed a bug that caused the shell to free non-allocated memory when
unsetting an associative array which had had a value implicitly assigned
to index "0".
oo. Fixed a memory leak in the ${!prefix@} expansion.
pp. Fixed a bug that caused printf to not correctly report all write errors.
qq. Fixed a bug that caused single and double quotes to act as delimiters
when splitting a command line into words for programmable completion.
rr. Fixed a bug that caused ** globbing that caused **/path/* to match every
directory, not just those matching `path'.
ss. Fixed a bug that caused the shell to dump core when running `help' without
arguments if the terminal width was fewer than 7 characters.
2. Changes to Readline
@@ -143,6 +166,16 @@ g. Fixed a bug that caused key sequences of two characters to not be
recognized when a longer sequence identical in the first two characters
was bound.
h. Fixed a bug that caused history expansion to be attempted on $'...'
single-quoted strings.
i. Fixed a bug that caused incorrect redisplay when the prompt contained
multibyte characters in an `invisible' sequence bracketed by \[ and
\].
j. Fixed a bug that caused history expansion to short-circuit after
encountering a multibyte character.
3. New Features in Bash
a. Here-documents within $(...) command substitutions may once more be
@@ -195,6 +228,25 @@ n. There is a new confgure option that forces the extglob option to be
o. New variable $BASH_XTRACEFD; when set to an integer bash will write xtrace
output to that file descriptor.
p. If the optional left-hand-side of a redirection is of the form {var}, the
shell assigns the file descriptor used to $var or uses $var as the file
descriptor to move or close, depending on the redirection operator.
q. The < and > operators to the [[ conditional command now do string
comparison according to the current locale.
r. Programmable completion now uses the completion for `b' instead of `a'
when completion is attempted on a line like: a $(b c.
s. Force extglob on temporarily when parsing the pattern argument to
the == and != operators to the [[ command, for compatibility.
t. Changed the behavior of interrupting the wait builtin when a SIGCHLD is
received and a trap on SIGCHLD is set to be Posix-mode only.
u. The read builtin has a new `-N nchars' option, which reads exactly NCHARS
characters, ignoring delimiters like newline.
4. New Features in Readline
a. New bindable function: menu-complete-backward.
@@ -218,6 +270,18 @@ f. New bindable variable: skip-completed-text, active when completing in the
middle of a word. If enabled, it means that characters in the completion
that match characters in the remainder of the word are "skipped" rather
than inserted into the line.
g. The pre-readline-6.0 version of menu completion is available as
"old-menu-complete" for users who do not like the readline-6.0 version.
h. New bindable variable: echo-control-characters. If enabled, and the
tty ECHOCTL bit is set, controls the echoing of characters corresponding
to keyboard-generated signals.
i. New bindable variable: enable-meta-key. Controls whether or not readline
sends the smm/rmm sequences if the terminal indicates it has a meta key
that enables eight-bit characters.
------------------------------------------------------------------------------
This document details the changes between this version, bash-4.0-release,
and the previous version, bash-4.0-rc1.
+23
View File
@@ -9130,3 +9130,26 @@ test.c
support/shobj-conf
- decrease the default version of FreeBSD that creates shared libraries
to 4.x. Advice from Peter Jeremy <peterjeremy@acm.org>
11/2
----
parse.y
- change parse_comsub to free `heredelim' and set it to 0 whenever the
comsub scanner finds the end of a here document. Really need to
implement a stack of here doc delimiters like in the parser (can we
use redir_stack here, too?)
- fix parse_comsub to not attempt to read another here doc delimiter
after seeing a shell break character (that is not newline) if we
already have one. Fixes Debian bash bug #553485, submitted by
Samuel Hym <samuel.hym@gmail.com>
11/3
----
variables.c
- fix bind_variable_internal to call a variable's dynamic 'set function'
with the right arguments depending on whether its an associative
array, an indexed array, or a scalar. Fixes Ubuntu bug #471504
https://bugs.launchpad.net/ubuntu/+source/bash/+bug/471504 reported
by AJ Slater <aj.slater@gmail.com>
[bash-4.1-beta frozen]
+57 -1
View File
@@ -9094,4 +9094,60 @@ lib/readline/complete.c
documentation states (incorrect in bash-4.1-alpha)
- in insert_match, skip over a close quote in the replacement text if
the character at point when completion is invoked is a single
quote
quote. Fixes complaint from bash-bugs@atu.cjb.net
10/26
-----
shell.c
- in main, make sure "$EMACS" is non-null before calling strstr on its
value. Fixes Red Hat bug 530911 submitted by Mitchell Berger
builtins/mapfile.def
- don't save callback commands in shell history. Suggested by
Jan Schampera <jan.schampera@web.de>
mailcheck.c
- in file_mod_date_changed, make sure the modification time is later
than the saved modification date, not just that it's not equal.
Fix from Evgeniy Dushistov <dushistov@mail.ru>
- in file_access_date_changed, make sure the access time is later
than the saved access time, not just that it's not equal
10/27
-----
builtins/shopt.def
- added new `compat40' compatibility variable, with associated changes
to shell_compatibility_level(), since the default compatibility level
is now 41
test.c
- make the < and > operators to [[ use strcoll() only if the shell
compatibility level is greater than 40 (it is 41 by default in
bash-4.1)
10/28
-----
support/shobj-conf
- decrease the default version of FreeBSD that creates shared libraries
to 4.x. Advice from Peter Jeremy <peterjeremy@acm.org>
11/2
----
parse.y
- change parse_comsub to free `heredelim' and set it to 0 whenever the
comsub scanner finds the end of a here document. Really need to
implement a stack of here doc delimiters like in the parser (can we
use redir_stack here, too?)
- fix parse_comsub to not attempt to read another here doc delimiter
after seeing a shell break character (that is not newline) if we
already have one. Fixes Debian bash bug #553485, submitted by
Samuel Hym <samuel.hym@gmail.com>
11/3
----
variables.c
- fix bind_variable_internal to call a variable's dynamic 'set function'
with the right arguments depending on whether its an associative
array, an indexed array, or a scalar. Fixes Ubuntu bug #471504
https://bugs.launchpad.net/ubuntu/+source/bash/+bug/471504 reported
by AJ Slater <aj.slater@gmail.com>
+8
View File
@@ -73,6 +73,14 @@ t. Changed the behavior of interrupting the wait builtin when a SIGCHLD is
u. The read builtin has a new `-N nchars' option, which reads exactly NCHARS
characters, ignoring delimiters like newline.
v. The mapfile/readarray builtin no longer stores the commands it invokes via
callbacks in the history list.
w. There is a new `compat40' shopt option.
x. The < and > operators to [[ do string comparisons using the current locale
only if the compatibility level is greater than 40 (set to 41 by default).
2. New Features in Readline
a. New bindable function: menu-complete-backward.
+1523
View File
File diff suppressed because it is too large Load Diff
+11 -11
View File
@@ -1,7 +1,7 @@
@%:@! /bin/sh
@%:@ From configure.in for Bash 4.1, version 4.015.
@%:@ From configure.in for Bash 4.1, version 4.016.
@%:@ Guess values for system-dependent variables and create Makefiles.
@%:@ Generated by GNU Autoconf 2.63 for bash 4.1-alpha.
@%:@ Generated by GNU Autoconf 2.63 for bash 4.1-beta.
@%:@
@%:@ Report bugs to <bug-bash@gnu.org>.
@%:@
@@ -597,8 +597,8 @@ SHELL=${CONFIG_SHELL-/bin/sh}
# Identity of this package.
PACKAGE_NAME='bash'
PACKAGE_TARNAME='bash'
PACKAGE_VERSION='4.1-alpha'
PACKAGE_STRING='bash 4.1-alpha'
PACKAGE_VERSION='4.1-beta'
PACKAGE_STRING='bash 4.1-beta'
PACKAGE_BUGREPORT='bug-bash@gnu.org'
ac_unique_file="shell.h"
@@ -1411,7 +1411,7 @@ if test "$ac_init_help" = "long"; then
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
\`configure' configures bash 4.1-alpha to adapt to many kinds of systems.
\`configure' configures bash 4.1-beta to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1476,7 +1476,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
short | recursive ) echo "Configuration of bash 4.1-alpha:";;
short | recursive ) echo "Configuration of bash 4.1-beta:";;
esac
cat <<\_ACEOF
@@ -1652,7 +1652,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
bash configure 4.1-alpha
bash configure 4.1-beta
generated by GNU Autoconf 2.63
Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
@@ -1666,7 +1666,7 @@ cat >config.log <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
It was created by bash $as_me 4.1-alpha, which was
It was created by bash $as_me 4.1-beta, which was
generated by GNU Autoconf 2.63. Invocation command line was
$ $0 $@
@@ -2078,7 +2078,7 @@ ac_config_headers="$ac_config_headers config.h"
BASHVERS=4.1
RELSTATUS=alpha
RELSTATUS=beta
case "$RELSTATUS" in
alp*|bet*|dev*|rc*|maint*) DEBUG='-DDEBUG' MALLOC_DEBUG='-DMALLOC_DEBUG' ;;
@@ -30964,7 +30964,7 @@ exec 6>&1
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
This file was extended by bash $as_me 4.1-alpha, which was
This file was extended by bash $as_me 4.1-beta, which was
generated by GNU Autoconf 2.63. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -31027,7 +31027,7 @@ Report bugs to <bug-autoconf@gnu.org>."
_ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_version="\\
bash config.status 4.1-alpha
bash config.status 4.1-beta
configured by $0, generated by GNU Autoconf 2.63,
with options \\"`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\"
+11 -11
View File
@@ -15,25 +15,25 @@
'configure.in'
],
{
'_LT_AC_TAGCONFIG' => 1,
'AM_PROG_F77_C_O' => 1,
'AC_INIT' => 1,
'_LT_AC_TAGCONFIG' => 1,
'm4_pattern_forbid' => 1,
'_AM_COND_IF' => 1,
'AC_INIT' => 1,
'AC_CANONICAL_TARGET' => 1,
'AC_SUBST' => 1,
'_AM_COND_IF' => 1,
'AC_CONFIG_LIBOBJ_DIR' => 1,
'AC_FC_SRCEXT' => 1,
'AC_SUBST' => 1,
'AC_CANONICAL_HOST' => 1,
'AC_FC_SRCEXT' => 1,
'AC_PROG_LIBTOOL' => 1,
'AM_INIT_AUTOMAKE' => 1,
'AC_CONFIG_SUBDIRS' => 1,
'AM_AUTOMAKE_VERSION' => 1,
'LT_CONFIG_LTDL_DIR' => 1,
'AC_REQUIRE_AUX_FILE' => 1,
'AC_CONFIG_LINKS' => 1,
'm4_sinclude' => 1,
'AC_REQUIRE_AUX_FILE' => 1,
'LT_SUPPORTED_TAG' => 1,
'm4_sinclude' => 1,
'AM_MAINTAINER_MODE' => 1,
'AM_GNU_GETTEXT_INTL_SUBDIR' => 1,
'_m4_warn' => 1,
@@ -49,13 +49,13 @@
'AC_CANONICAL_BUILD' => 1,
'AC_FC_FREEFORM' => 1,
'AH_OUTPUT' => 1,
'_AM_SUBST_NOTMAKE' => 1,
'AC_CONFIG_AUX_DIR' => 1,
'sinclude' => 1,
'm4_pattern_allow' => 1,
'_AM_SUBST_NOTMAKE' => 1,
'AM_PROG_CC_C_O' => 1,
'AC_CANONICAL_SYSTEM' => 1,
'm4_pattern_allow' => 1,
'sinclude' => 1,
'AM_CONDITIONAL' => 1,
'AC_CANONICAL_SYSTEM' => 1,
'AC_CONFIG_HEADERS' => 1,
'AC_DEFINE_TRACE_LITERAL' => 1,
'm4_include' => 1,
+1 -1
View File
@@ -1,4 +1,4 @@
m4trace:configure.in:29: -1- AC_INIT([bash], [4.1-alpha], [bug-bash@gnu.org])
m4trace:configure.in:29: -1- AC_INIT([bash], [4.1-beta], [bug-bash@gnu.org])
m4trace:configure.in:29: -1- m4_pattern_forbid([^_?A[CHUM]_])
m4trace:configure.in:29: -1- m4_pattern_forbid([_AC_])
m4trace:configure.in:29: -1- m4_pattern_forbid([^LIBOBJS$], [do not use LIBOBJS directly, use AC_LIBOBJ (see section `AC_LIBOBJ vs LIBOBJS'])
Vendored
+11 -11
View File
@@ -1,7 +1,7 @@
#! /bin/sh
# From configure.in for Bash 4.1, version 4.015.
# From configure.in for Bash 4.1, version 4.016.
# Guess values for system-dependent variables and create Makefiles.
# Generated by GNU Autoconf 2.63 for bash 4.1-alpha.
# Generated by GNU Autoconf 2.63 for bash 4.1-beta.
#
# Report bugs to <bug-bash@gnu.org>.
#
@@ -597,8 +597,8 @@ SHELL=${CONFIG_SHELL-/bin/sh}
# Identity of this package.
PACKAGE_NAME='bash'
PACKAGE_TARNAME='bash'
PACKAGE_VERSION='4.1-alpha'
PACKAGE_STRING='bash 4.1-alpha'
PACKAGE_VERSION='4.1-beta'
PACKAGE_STRING='bash 4.1-beta'
PACKAGE_BUGREPORT='bug-bash@gnu.org'
ac_unique_file="shell.h"
@@ -1411,7 +1411,7 @@ if test "$ac_init_help" = "long"; then
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
\`configure' configures bash 4.1-alpha to adapt to many kinds of systems.
\`configure' configures bash 4.1-beta to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1476,7 +1476,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
short | recursive ) echo "Configuration of bash 4.1-alpha:";;
short | recursive ) echo "Configuration of bash 4.1-beta:";;
esac
cat <<\_ACEOF
@@ -1652,7 +1652,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
bash configure 4.1-alpha
bash configure 4.1-beta
generated by GNU Autoconf 2.63
Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
@@ -1666,7 +1666,7 @@ cat >config.log <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
It was created by bash $as_me 4.1-alpha, which was
It was created by bash $as_me 4.1-beta, which was
generated by GNU Autoconf 2.63. Invocation command line was
$ $0 $@
@@ -2078,7 +2078,7 @@ ac_config_headers="$ac_config_headers config.h"
BASHVERS=4.1
RELSTATUS=alpha
RELSTATUS=beta
case "$RELSTATUS" in
alp*|bet*|dev*|rc*|maint*) DEBUG='-DDEBUG' MALLOC_DEBUG='-DMALLOC_DEBUG' ;;
@@ -30964,7 +30964,7 @@ exec 6>&1
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
This file was extended by bash $as_me 4.1-alpha, which was
This file was extended by bash $as_me 4.1-beta, which was
generated by GNU Autoconf 2.63. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -31027,7 +31027,7 @@ Report bugs to <bug-autoconf@gnu.org>."
_ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_version="\\
bash config.status 4.1-alpha
bash config.status 4.1-beta
configured by $0, generated by GNU Autoconf 2.63,
with options \\"`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\"
+9 -2
View File
@@ -701,8 +701,9 @@ bgp_delete (pid)
for (prev = p = bgpids.list; p; prev = p, p = p->next)
if (p->pid == pid)
{
prev->next = p->next; /* remove from list */
break;
if (p != prev)
prev->next = p->next; /* remove from list */
break;
}
if (p == 0)
@@ -3050,6 +3051,12 @@ waitchld (wpid, block)
/* Check for terminating signals and exit the shell if we receive one */
CHECK_TERMSIG;
if (block == 1 && queue_sigchld == 0 && (waitpid_flags & WNOHANG) == 0)
{
internal_warning (_("waitchld: turning on WNOHANG to avoid indefinite block"));
waitpid_flags |= WNOHANG;
}
pid = WAITPID (-1, &status, waitpid_flags);
/* WCONTINUED may be rejected by waitpid as invalid even when defined */
+12 -3
View File
@@ -481,6 +481,7 @@ stop_pipeline (async, deferred)
JOB *newjob;
sigset_t set, oset;
itrace("stop_pipeline");
BLOCK_CHILD (set, oset);
#if defined (PGRP_PIPE)
@@ -701,8 +702,9 @@ bgp_delete (pid)
for (prev = p = bgpids.list; p; prev = p, p = p->next)
if (p->pid == pid)
{
prev->next = p->next; /* remove from list */
break;
if (p != prev)
prev->next = p->next; /* remove from list */
break;
}
if (p == 0)
@@ -1100,6 +1102,7 @@ add_process (name, pid)
{
PROCESS *t, *p;
itrace("add_process; %s (%d)", name, pid);
#if defined (RECYCLES_PIDS)
int j;
p = find_process (pid, 0, &j);
@@ -3050,6 +3053,12 @@ waitchld (wpid, block)
/* Check for terminating signals and exit the shell if we receive one */
CHECK_TERMSIG;
if (block == 1 && queue_sigchld == 0 && (waitpid_flags & WNOHANG) == 0)
{
internal_warning (_("waitchld: turning on WNOHANG to avoid indefinite block"));
waitpid_flags |= WNOHANG;
}
pid = WAITPID (-1, &status, waitpid_flags);
/* WCONTINUED may be rejected by waitpid as invalid even when defined */
@@ -3150,7 +3159,7 @@ waitchld (wpid, block)
wait_signal_received = SIGCHLD;
longjmp (wait_intr_buf, 1);
}
itrace("waitchld: call run_sigchld_trap (%d)", children_exited);
run_sigchld_trap (children_exited);
}
+19 -4
View File
@@ -3378,6 +3378,8 @@ eof_error:
{
tflags &= ~(LEX_STRIPDOC|LEX_INHEREDOC);
/*itrace("parse_comsub:%d: found here doc end `%s'", line_number, ret + tind);*/
free (heredelim);
heredelim = 0;
lex_firstind = -1;
}
else
@@ -3402,6 +3404,8 @@ eof_error:
{
tflags &= ~(LEX_STRIPDOC|LEX_INHEREDOC);
/*itrace("parse_comsub:%d: found here doc end `%s'", line_number, ret + tind);*/
free (heredelim);
heredelim = 0;
lex_firstind = -1;
}
}
@@ -3482,13 +3486,24 @@ eof_error:
{
if (lex_firstind == -1 && shellbreak (ch) == 0)
lex_firstind = retind;
#if 0
else if (heredelim && (tflags & LEX_PASSNEXT) == 0 && ch == '\n')
{
tflags |= LEX_INHEREDOC;
tflags &= ~LEX_HEREDELIM;
lex_firstind = retind + 1;
}
#endif
else if (lex_firstind >= 0 && (tflags & LEX_PASSNEXT) == 0 && shellbreak (ch))
{
nestret = substring (ret, lex_firstind, retind);
heredelim = string_quote_removal (nestret, 0);
free (nestret);
hdlen = STRLEN(heredelim);
if (heredelim == 0)
{
nestret = substring (ret, lex_firstind, retind);
heredelim = string_quote_removal (nestret, 0);
free (nestret);
hdlen = STRLEN(heredelim);
/*itrace("parse_comsub:%d: found here doc delimiter `%s' (%d)", line_number, heredelim, hdlen);*/
}
if (ch == '\n')
{
tflags |= LEX_INHEREDOC;
+5896
View File
File diff suppressed because it is too large Load Diff
+3
View File
@@ -10,6 +10,7 @@ shopt -u checkwinsize
shopt -s cmdhist
shopt -u compat31
shopt -u compat32
shopt -u compat40
shopt -u dirspell
shopt -u dotglob
shopt -u execfail
@@ -63,6 +64,7 @@ shopt -u checkjobs
shopt -u checkwinsize
shopt -u compat31
shopt -u compat32
shopt -u compat40
shopt -u dirspell
shopt -u dotglob
shopt -u execfail
@@ -93,6 +95,7 @@ checkjobs off
checkwinsize off
compat31 off
compat32 off
compat40 off
dirspell off
dotglob off
execfail off
+6 -1
View File
@@ -2192,7 +2192,12 @@ bind_variable_internal (name, value, table, hflags, aflags)
{
INVALIDATE_EXPORTSTR (entry);
newval = (aflags & ASS_APPEND) ? make_variable_value (entry, value, aflags) : value;
entry = (*(entry->assign_func)) (entry, newval, -1, 0);
if (assoc_p (entry))
entry = (*(entry->assign_func)) (entry, newval, -1, savestring ("0"));
else if (array_p (entry))
entry = (*(entry->assign_func)) (entry, newval, 0, 0);
else
entry = (*(entry->assign_func)) (entry, newval, -1, 0);
if (newval != value)
free (newval);
return (entry);