cpphash.c (_cpp_destroy_hashtable): Use ht_destroy.
* cpphash.c (_cpp_destroy_hashtable): Use ht_destroy. * cpphash.h (CPP_IN_SYSTEM_HEADER): Fix. (struct cpp_pool): New member first. * cppinit.c (append_include_chain): Plug memory leaks. * cpplib.c (cpp_register_pragma, cpp_register_pragma_space): Allocate pragma structures from the (aligned) macro pool to avoid leaking memory. * cpplex.c (_cpp_init_pool, _cpp_free_pool): Use pool->first so we don't leak memory. * hashtable.c (ht_destroy): New. * hashtable.h (ht_destroy): New. From-SVN: r44794
This commit is contained in:
parent
4d5f3fbd61
commit
bef985f3f6
@ -1,3 +1,17 @@
|
||||
2001-08-11 Neil Booth <neil@daikokuya.demon.co.uk>
|
||||
|
||||
* cpphash.c (_cpp_destroy_hashtable): Use ht_destroy.
|
||||
* cpphash.h (CPP_IN_SYSTEM_HEADER): Fix.
|
||||
(struct cpp_pool): New member first.
|
||||
* cppinit.c (append_include_chain): Plug memory leaks.
|
||||
* cpplib.c (cpp_register_pragma, cpp_register_pragma_space):
|
||||
Allocate pragma structures from the (aligned) macro pool to
|
||||
avoid leaking memory.
|
||||
* cpplex.c (_cpp_init_pool, _cpp_free_pool): Use pool->first
|
||||
so we don't leak memory.
|
||||
* hashtable.c (ht_destroy): New.
|
||||
* hashtable.h (ht_destroy): New.
|
||||
|
||||
2001-08-11 Neil Booth <neil@daikokuya.demon.co.uk>
|
||||
Franz Sirl <Franz.Sirl-kernel@lauterbach.com>
|
||||
|
||||
|
@ -73,7 +73,7 @@ _cpp_destroy_hashtable (pfile)
|
||||
{
|
||||
if (pfile->our_hashtable)
|
||||
{
|
||||
free (pfile->hash_table);
|
||||
ht_destroy (pfile->hash_table);
|
||||
obstack_free (&pfile->hash_ob, 0);
|
||||
}
|
||||
}
|
||||
|
@ -66,7 +66,7 @@ struct cpp_chunk
|
||||
typedef struct cpp_pool cpp_pool;
|
||||
struct cpp_pool
|
||||
{
|
||||
struct cpp_chunk *cur, *locked;
|
||||
struct cpp_chunk *cur, *locked, *first;
|
||||
unsigned char *pos; /* Current position. */
|
||||
unsigned int align;
|
||||
unsigned int locks;
|
||||
@ -368,7 +368,7 @@ extern unsigned char _cpp_trigraph_map[UCHAR_MAX + 1];
|
||||
/* Macros. */
|
||||
|
||||
#define CPP_PRINT_DEPS(PFILE) CPP_OPTION (PFILE, print_deps)
|
||||
#define CPP_IN_SYSTEM_HEADER(PFILE) (pfile->map && pfile->map->sysp)
|
||||
#define CPP_IN_SYSTEM_HEADER(PFILE) ((PFILE)->map && (PFILE)->map->sysp)
|
||||
#define CPP_PEDANTIC(PF) CPP_OPTION (PF, pedantic)
|
||||
#define CPP_WTRADITIONAL(PF) CPP_OPTION (PF, warn_traditional)
|
||||
|
||||
|
@ -197,8 +197,8 @@ path_include (pfile, list, path)
|
||||
while (1);
|
||||
}
|
||||
|
||||
/* Append DIR to include path PATH. DIR must be permanently allocated
|
||||
and writable. */
|
||||
/* Append DIR to include path PATH. DIR must be allocated on the
|
||||
heap; this routine takes responsibility for freeing it. */
|
||||
static void
|
||||
append_include_chain (pfile, dir, path, cxx_aware)
|
||||
cpp_reader *pfile;
|
||||
@ -212,8 +212,12 @@ append_include_chain (pfile, dir, path, cxx_aware)
|
||||
unsigned int len;
|
||||
|
||||
if (*dir == '\0')
|
||||
dir = xstrdup (".");
|
||||
{
|
||||
free (dir);
|
||||
dir = xstrdup (".");
|
||||
}
|
||||
_cpp_simplify_pathname (dir);
|
||||
|
||||
if (stat (dir, &st))
|
||||
{
|
||||
/* Dirs that don't exist are silently ignored. */
|
||||
@ -221,12 +225,14 @@ append_include_chain (pfile, dir, path, cxx_aware)
|
||||
cpp_notice_from_errno (pfile, dir);
|
||||
else if (CPP_OPTION (pfile, verbose))
|
||||
fprintf (stderr, _("ignoring nonexistent directory \"%s\"\n"), dir);
|
||||
free (dir);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!S_ISDIR (st.st_mode))
|
||||
{
|
||||
cpp_notice (pfile, "%s: Not a directory", dir);
|
||||
free (dir);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -375,7 +381,7 @@ merge_include_chains (pfile)
|
||||
brack = remove_dup_dir (pfile, qtail);
|
||||
}
|
||||
else
|
||||
quote = brack;
|
||||
quote = brack;
|
||||
|
||||
CPP_OPTION (pfile, quote_include) = quote;
|
||||
CPP_OPTION (pfile, bracket_include) = brack;
|
||||
|
@ -2109,7 +2109,8 @@ _cpp_init_pool (pool, size, align, temp)
|
||||
if (align & (align - 1))
|
||||
abort ();
|
||||
pool->align = align;
|
||||
pool->cur = new_chunk (size);
|
||||
pool->first = new_chunk (size);
|
||||
pool->cur = pool->first;
|
||||
pool->locked = 0;
|
||||
pool->locks = 0;
|
||||
if (temp)
|
||||
@ -2136,7 +2137,7 @@ void
|
||||
_cpp_free_pool (pool)
|
||||
cpp_pool *pool;
|
||||
{
|
||||
cpp_chunk *chunk = pool->cur, *next;
|
||||
cpp_chunk *chunk = pool->first, *next;
|
||||
|
||||
do
|
||||
{
|
||||
@ -2144,7 +2145,7 @@ _cpp_free_pool (pool)
|
||||
free (chunk->base);
|
||||
chunk = next;
|
||||
}
|
||||
while (chunk && chunk != pool->cur);
|
||||
while (chunk && chunk != pool->first);
|
||||
}
|
||||
|
||||
/* Reserve LEN bytes from a memory pool. */
|
||||
|
@ -901,7 +901,8 @@ cpp_register_pragma (pfile, space, name, handler)
|
||||
}
|
||||
|
||||
found:
|
||||
new = xnew (struct pragma_entry);
|
||||
new = (struct pragma_entry *)
|
||||
_cpp_pool_alloc (&pfile->macro_pool, sizeof (struct pragma_entry));
|
||||
new->name = name;
|
||||
new->len = strlen (name);
|
||||
new->isnspace = 0;
|
||||
@ -929,7 +930,8 @@ cpp_register_pragma_space (pfile, space)
|
||||
p = p->next;
|
||||
}
|
||||
|
||||
new = xnew (struct pragma_entry);
|
||||
new = (struct pragma_entry *)
|
||||
_cpp_pool_alloc (&pfile->macro_pool, sizeof (struct pragma_entry));
|
||||
new->name = space;
|
||||
new->len = len;
|
||||
new->isnspace = 1;
|
||||
|
@ -94,6 +94,17 @@ ht_create (order)
|
||||
return table;
|
||||
}
|
||||
|
||||
/* Frees all memory associated with a hash table. */
|
||||
|
||||
void
|
||||
ht_destroy (table)
|
||||
hash_table *table;
|
||||
{
|
||||
obstack_free (&table->stack, NULL);
|
||||
free (table->entries);
|
||||
free (table);
|
||||
}
|
||||
|
||||
/* Returns the hash entry for the a STR of length LEN. If that string
|
||||
already exists in the table, returns the existing entry, and, if
|
||||
INSERT is CPP_ALLOCED, frees the last obstack object. If the
|
||||
|
@ -64,8 +64,13 @@ struct ht
|
||||
};
|
||||
|
||||
extern void gcc_obstack_init PARAMS ((struct obstack *));
|
||||
|
||||
/* Initialise the hashtable with 2 ^ order entries. */
|
||||
extern hash_table *ht_create PARAMS ((unsigned int order));
|
||||
|
||||
/* Frees all memory associated with a hash table. */
|
||||
extern void ht_destroy PARAMS ((hash_table *));
|
||||
|
||||
extern hashnode ht_lookup PARAMS ((hash_table *, const unsigned char *,
|
||||
unsigned int, enum ht_lookup_option));
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user