summaryrefslogtreecommitdiffstats
path: root/lib/symtab.c
diff options
context:
space:
mode:
authorChris Hall (GMCH) <chris.hall@highwayman.com>2009-12-10 12:41:04 +0000
committerChris Hall (GMCH) <chris.hall@highwayman.com>2009-12-10 12:41:04 +0000
commite4024f34fc4a72c9d680ea61bf28b10d0cb80854 (patch)
tree7f413d3c1d655aa6edab1337e913df214d740031 /lib/symtab.c
parent3cad62944e8270fcd9562f6d115c064d61211c6c (diff)
downloadquagga-e4024f34fc4a72c9d680ea61bf28b10d0cb80854.tar.bz2
quagga-e4024f34fc4a72c9d680ea61bf28b10d0cb80854.tar.xz
Allow orphan symbols to be unset -- lib/symtab.c
Improved version.
Diffstat (limited to 'lib/symtab.c')
-rw-r--r--lib/symtab.c15
1 files changed, 9 insertions, 6 deletions
diff --git a/lib/symtab.c b/lib/symtab.c
index adc21e73..885be426 100644
--- a/lib/symtab.c
+++ b/lib/symtab.c
@@ -880,15 +880,18 @@ symbol_set_value(symbol sym, void* new_value)
{
void* old_value ;
- assert((sym->table != NULL) || (new_value == NULL)) ;
- /* may not set non-NULL value for orphan symbol ! */
-
old_value = sym->value ;
sym->value = new_value ;
- /* Invoke value_call_back (if any). */
- /* Note that the value_call_back may set/unset references and/or */
- /* define/undefine the value. */
+ if (sym->table == NULL) /* watch out for orphans */
+ {
+ assert((new_value == NULL) && (old_value == NULL)) ;
+ return NULL ;
+ } ;
+
+ /* Invoke value_call_back (if any). */
+ /* Note that the value_call_back may set/unset references and/or */
+ /* define/undefine the value. */
if (((sym)->table->value_call_back != NULL)
&& ( (new_value != NULL) || (old_value != NULL) ))
{