X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=bfd%2Fhash.c;h=9766eaf0cf233cf57e434ca79fccd96d3651122e;hb=6eb69eab2909778dc96bdb5dbb83d7756bee4601;hp=8ea4375d5c70172be3d513351fdd4785c6c4ac78;hpb=a9713b91a74c2cc05db65ec58573f388d2c41cc0;p=deliverable%2Fbinutils-gdb.git diff --git a/bfd/hash.c b/bfd/hash.c index 8ea4375d5c..9766eaf0cf 100644 --- a/bfd/hash.c +++ b/bfd/hash.c @@ -1,5 +1,6 @@ /* hash.c -- hash table routines for BFD - Copyright (C) 1993, 94 Free Software Foundation, Inc. + Copyright 1993, 1994, 1995, 1997, 1999, 2001 + Free Software Foundation, Inc. Written by Steve Chamberlain This file is part of BFD, the Binary File Descriptor library. @@ -21,7 +22,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "bfd.h" #include "sysdep.h" #include "libbfd.h" -#include "obstack.h" +#include "objalloc.h" /* SECTION @@ -73,13 +74,13 @@ SUBSECTION The function <> take as an argument a function to use to create new entries. For a basic hash table, use the function <>. @xref{Deriving - a New Hash Table Type} for why you would want to use a + a New Hash Table Type}, for why you would want to use a different value for this argument. @findex bfd_hash_allocate - <> will create an obstack which will be + <> will create an objalloc which will be used to allocate new entries. You may allocate memory on this - obstack using <>. + objalloc using <>. @findex bfd_hash_table_free Use <> to free up all the memory that has @@ -111,7 +112,7 @@ SUBSECTION If the @var{create} argument is <>, and a new entry is created, the @var{copy} argument is used to decide whether to - copy the string onto the hash table obstack or not. If + copy the string onto the hash table objalloc or not. If @var{copy} is passed as <>, you must be careful not to deallocate or modify the string as long as the hash table exists. @@ -268,7 +269,7 @@ SUBSUBSECTION Write other derived routines You will want to write other routines for your new hash table, - as well. + as well. You will want an initialization routine which calls the initialization routine of the hash table you are deriving from @@ -293,10 +294,6 @@ SUBSUBSECTION <> in aoutx.h. */ -/* Obstack allocation and deallocation routines. */ -#define obstack_chunk_alloc malloc -#define obstack_chunk_free free - /* The default number of entries to use when creating a hash table. */ #define DEFAULT_SIZE (4051) @@ -313,14 +310,16 @@ bfd_hash_table_init_n (table, newfunc, size) unsigned int alloc; alloc = size * sizeof (struct bfd_hash_entry *); - if (!obstack_begin (&table->memory, alloc)) + + table->memory = (PTR) objalloc_create (); + if (table->memory == NULL) { bfd_set_error (bfd_error_no_memory); return false; } table->table = ((struct bfd_hash_entry **) - obstack_alloc (&table->memory, alloc)); - if (!table->table) + objalloc_alloc ((struct objalloc *) table->memory, alloc)); + if (table->table == NULL) { bfd_set_error (bfd_error_no_memory); return false; @@ -349,7 +348,8 @@ void bfd_hash_table_free (table) struct bfd_hash_table *table; { - obstack_free (&table->memory, (PTR) NULL); + objalloc_free ((struct objalloc *) table->memory); + table->memory = NULL; } /* Look up a string in a hash table. */ @@ -367,7 +367,7 @@ bfd_hash_lookup (table, string, create, copy) struct bfd_hash_entry *hashp; unsigned int len; unsigned int index; - + hash = 0; len = 0; s = (const unsigned char *) string; @@ -400,7 +400,8 @@ bfd_hash_lookup (table, string, create, copy) { char *new; - new = (char *) obstack_alloc (&table->memory, len + 1); + new = (char *) objalloc_alloc ((struct objalloc *) table->memory, + len + 1); if (!new) { bfd_set_error (bfd_error_no_memory); @@ -450,7 +451,7 @@ struct bfd_hash_entry * bfd_hash_newfunc (entry, table, string) struct bfd_hash_entry *entry; struct bfd_hash_table *table; - const char *string; + const char *string ATTRIBUTE_UNUSED; { if (entry == (struct bfd_hash_entry *) NULL) entry = ((struct bfd_hash_entry *) @@ -467,7 +468,7 @@ bfd_hash_allocate (table, size) { PTR ret; - ret = obstack_alloc (&table->memory, size); + ret = objalloc_alloc ((struct objalloc *) table->memory, size); if (ret == NULL && size != 0) bfd_set_error (bfd_error_no_memory); return ret; @@ -581,13 +582,11 @@ struct bfd_strtab_hash * _bfd_stringtab_init () { struct bfd_strtab_hash *table; + bfd_size_type amt = sizeof (struct bfd_strtab_hash); - table = (struct bfd_strtab_hash *) malloc (sizeof (struct bfd_strtab_hash)); + table = (struct bfd_strtab_hash *) bfd_malloc (amt); if (table == NULL) - { - bfd_set_error (bfd_error_no_memory); - return NULL; - } + return NULL; if (! bfd_hash_table_init (&table->table, strtab_hash_newfunc)) { @@ -712,8 +711,8 @@ _bfd_stringtab_emit (abfd, tab) for (entry = tab->first; entry != NULL; entry = entry->next) { - register const char *str; - register size_t len; + const char *str; + size_t len; str = entry->root.string; len = strlen (str) + 1; @@ -723,12 +722,12 @@ _bfd_stringtab_emit (abfd, tab) bfd_byte buf[2]; /* The output length includes the null byte. */ - bfd_put_16 (abfd, len, buf); - if (bfd_write ((PTR) buf, 1, 2, abfd) != 2) + bfd_put_16 (abfd, (bfd_vma) len, buf); + if (bfd_bwrite ((PTR) buf, (bfd_size_type) 2, abfd) != 2) return false; } - if (bfd_write ((PTR) str, 1, len, abfd) != len) + if (bfd_bwrite ((PTR) str, (bfd_size_type) len, abfd) != len) return false; }