forked from Imagelibrary/binutils-gdb
Avoid memory leak in chew
An earlier patch of mine introduced a memory leak in chew. The bug was that the new "variable" word didn't free the following word. This patch fixes it by arranging to transfer ownership of the name to the variable itself. * doc/chew.c (add_variable): New function, from add_intrinsic_variable. (add_intrinsic_variable): Call add_variable. (compile): Call add_variable.
This commit is contained in:
@@ -1241,9 +1241,9 @@ add_intrinsic (char *name, void (*func) (void))
|
||||
}
|
||||
|
||||
static void
|
||||
add_intrinsic_variable (char *name, intptr_t *loc)
|
||||
add_variable (char *name, intptr_t *loc)
|
||||
{
|
||||
dict_type *new_d = newentry (xstrdup (name));
|
||||
dict_type *new_d = newentry (name);
|
||||
pcu p = { push_variable };
|
||||
add_to_definition (new_d, p);
|
||||
p.l = (intptr_t) loc;
|
||||
@@ -1252,6 +1252,12 @@ add_intrinsic_variable (char *name, intptr_t *loc)
|
||||
add_to_definition (new_d, p);
|
||||
}
|
||||
|
||||
static void
|
||||
add_intrinsic_variable (const char *name, intptr_t *loc)
|
||||
{
|
||||
add_variable (xstrdup (name), loc);
|
||||
}
|
||||
|
||||
void
|
||||
compile (char *string)
|
||||
{
|
||||
@@ -1333,7 +1339,7 @@ compile (char *string)
|
||||
continue;
|
||||
intptr_t *loc = xmalloc (sizeof (intptr_t));
|
||||
*loc = 0;
|
||||
add_intrinsic_variable (word, loc);
|
||||
add_variable (word, loc);
|
||||
string = nextword (string, &word);
|
||||
}
|
||||
else
|
||||
|
||||
Reference in New Issue
Block a user