diff options
Diffstat (limited to 'libiberty')
-rw-r--r-- | libiberty/ChangeLog | 23 | ||||
-rwxr-xr-x | libiberty/configure | 2 | ||||
-rw-r--r-- | libiberty/configure.in | 2 | ||||
-rw-r--r-- | libiberty/hashtab.c | 82 |
4 files changed, 64 insertions, 45 deletions
diff --git a/libiberty/ChangeLog b/libiberty/ChangeLog index 89fca1e..916995e 100644 --- a/libiberty/ChangeLog +++ b/libiberty/ChangeLog @@ -1,3 +1,22 @@ +2002-06-05 Geoffrey Keating <geoffk@redhat.com> + + * hashtab.c (htab_create): New stub function for backward + compatibility. + (htab_try_create): Likewise. + +2002-06-03 Geoffrey Keating <geoffk@redhat.com> + + * hashtab.c (htab_create): Delete. + (htab_try_create): Delete. + (htab_create_alloc): New. + (htab_delete): Support user-specified memory allocation. + (htab_expand): Likewise. + +2002-05-22 Roman Lechtchinsky <rl@cs.tu-berlin.de> + + * configure.in: Fix typo in the code checking for sys_errlist. + * configure: Regenerated. + 2002-05-13 Andreas Schwab <schwab@suse.de> * config.table: Use mh-x86pic also for x86-64. @@ -30,7 +49,7 @@ 2002-03-30 Bryce McKinlay <bryce@waitaki.otago.ac.nz> - * cp-demangle.c (java_demangle_v3): Don't try to release "demangled" + * cp-demangle.c (java_demangle_v3): Don't try to release "demangled" if it is NULL. 2002-03-27 DJ Delorie <dj@redhat.com> @@ -89,7 +108,7 @@ * xmalloc.c (xmalloc_fail): Clarify error message. -2002-02-21 Jim Blandy <jimb@redhat.com> +2002-02-22 Jim Blandy <jimb@redhat.com> * splay-tree.c (splay_tree_xmalloc_allocate, splay_tree_xmalloc_deallocate): New functions. diff --git a/libiberty/configure b/libiberty/configure index fc89885..7f2c0a9 100755 --- a/libiberty/configure +++ b/libiberty/configure @@ -2860,7 +2860,7 @@ else #include "confdefs.h" int *p; int main() { -extern int $v []; p = &$v; +extern int $v []; p = $v; ; return 0; } EOF if { (eval echo configure:2867: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then diff --git a/libiberty/configure.in b/libiberty/configure.in index f6d92bc..c84ece4 100644 --- a/libiberty/configure.in +++ b/libiberty/configure.in @@ -401,7 +401,7 @@ if test -z "${setobjs}"; then for v in $vars; do AC_MSG_CHECKING([for $v]) AC_CACHE_VAL(libiberty_cv_var_$v, - [AC_TRY_LINK([int *p;], [extern int $v []; p = &$v;], + [AC_TRY_LINK([int *p;], [extern int $v []; p = $v;], [eval "libiberty_cv_var_$v=yes"], [eval "libiberty_cv_var_$v=no"])]) if eval "test \"`echo '$libiberty_cv_var_'$v`\" = yes"; then diff --git a/libiberty/hashtab.c b/libiberty/hashtab.c index 7477c35..6bf59ff 100644 --- a/libiberty/hashtab.c +++ b/libiberty/hashtab.c @@ -158,60 +158,60 @@ eq_pointer (p1, p2) /* This function creates table with length slightly longer than given source length. Created hash table is initiated as empty (all the hash table entries are EMPTY_ENTRY). The function returns the - created hash table. Memory allocation must not fail. */ + created hash table, or NULL if memory allocation fails. */ htab_t -htab_create (size, hash_f, eq_f, del_f) +htab_create_alloc (size, hash_f, eq_f, del_f, alloc_f, free_f) size_t size; htab_hash hash_f; htab_eq eq_f; htab_del del_f; + htab_alloc alloc_f; + htab_free free_f; { htab_t result; size = higher_prime_number (size); - result = (htab_t) xcalloc (1, sizeof (struct htab)); - result->entries = (PTR *) xcalloc (size, sizeof (PTR)); + result = (htab_t) (*alloc_f) (1, sizeof (struct htab)); + if (result == NULL) + return NULL; + result->entries = (PTR *) (*alloc_f) (size, sizeof (PTR)); + if (result->entries == NULL) + { + if (free_f != NULL) + (*free_f) (result); + return NULL; + } result->size = size; result->hash_f = hash_f; result->eq_f = eq_f; result->del_f = del_f; - result->return_allocation_failure = 0; + result->alloc_f = alloc_f; + result->free_f = free_f; return result; } -/* This function creates table with length slightly longer than given - source length. The created hash table is initiated as empty (all the - hash table entries are EMPTY_ENTRY). The function returns the created - hash table. Memory allocation may fail; it may return NULL. */ +/* These functions exist solely for backward compatibility. */ +#undef htab_create htab_t -htab_try_create (size, hash_f, eq_f, del_f) +htab_create (size, hash_f, eq_f, del_f) size_t size; htab_hash hash_f; htab_eq eq_f; htab_del del_f; { - htab_t result; - - size = higher_prime_number (size); - result = (htab_t) calloc (1, sizeof (struct htab)); - if (result == NULL) - return NULL; - - result->entries = (PTR *) calloc (size, sizeof (PTR)); - if (result->entries == NULL) - { - free (result); - return NULL; - } + return htab_create_alloc (size, hash_f, eq_f, del_f, xcalloc, free); +} - result->size = size; - result->hash_f = hash_f; - result->eq_f = eq_f; - result->del_f = del_f; - result->return_allocation_failure = 1; - return result; +htab_t +htab_try_create (size, hash_f, eq_f, del_f) + size_t size; + htab_hash hash_f; + htab_eq eq_f; + htab_del del_f; +{ + return htab_create_alloc (size, hash_f, eq_f, del_f, calloc, free); } /* This function frees all memory allocated for given hash table. @@ -229,8 +229,11 @@ htab_delete (htab) && htab->entries[i] != DELETED_ENTRY) (*htab->del_f) (htab->entries[i]); - free (htab->entries); - free (htab); + if (htab->free_f != NULL) + { + (*htab->free_f) (htab->entries); + (*htab->free_f) (htab); + } } /* This function clears all entries in the given hash table. */ @@ -302,21 +305,17 @@ htab_expand (htab) PTR *oentries; PTR *olimit; PTR *p; + PTR *nentries; oentries = htab->entries; olimit = oentries + htab->size; htab->size = higher_prime_number (htab->size * 2); - if (htab->return_allocation_failure) - { - PTR *nentries = (PTR *) calloc (htab->size, sizeof (PTR *)); - if (nentries == NULL) - return 0; - htab->entries = nentries; - } - else - htab->entries = (PTR *) xcalloc (htab->size, sizeof (PTR *)); + nentries = (PTR *) (*htab->alloc_f) (htab->size, sizeof (PTR *)); + if (nentries == NULL) + return 0; + htab->entries = nentries; htab->n_elements -= htab->n_deleted; htab->n_deleted = 0; @@ -337,7 +336,8 @@ htab_expand (htab) } while (p < olimit); - free (oentries); + if (htab->free_f != NULL) + (*htab->free_f) (oentries); return 1; } |