aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/variable.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/src/variable.c b/src/variable.c
index 333daeb..8e75ea2 100644
--- a/src/variable.c
+++ b/src/variable.c
@@ -163,24 +163,27 @@ symtab_remove(struct symtab *st, const char *name)
163 unsigned int pos, i, j, r; 163 unsigned int pos, i, j, r;
164 struct variable *entry; 164 struct variable *entry;
165 165
166 pos = hash_string(name, hash_size[st->hash_num]); 166 pos = hash_string(name, hash_size[st->hash_num]);
167 for (i = pos; (entry = st->tab[i]);) { 167 for (i = pos; (entry = st->tab[i]);) {
168 if (strcmp(entry->name, name) == 0) 168 if (strcmp(entry->name, name) == 0)
169 break; 169 break;
170 if (++i >= hash_size[st->hash_num]) 170 if (++i >= hash_size[st->hash_num])
171 i = 0; 171 i = 0;
172 if (i == pos) 172 if (i == pos)
173 return ENOENT; 173 return ENOENT;
174 } 174 }
175
176 if (!entry)
177 return ENOENT;
175 178
176 var_free(entry); 179 var_free(entry);
177 180
178 for (;;) { 181 for (;;) {
179 st->tab[i] = NULL; 182 st->tab[i] = NULL;
180 j = i; 183 j = i;
181 184
182 do { 185 do {
183 if (++i >= hash_size[st->hash_num]) 186 if (++i >= hash_size[st->hash_num])
184 i = 0; 187 i = 0;
185 if (!st->tab[i]) 188 if (!st->tab[i])
186 return 0; 189 return 0;

Return to:

Send suggestions and report system problems to the System administrator.