summaryrefslogtreecommitdiffstats
path: root/gcc/cppfiles.c
diff options
context:
space:
mode:
authorbothner <bothner@138bc75d-0d04-0410-961f-82ee72b054a4>2003-12-05 22:50:53 +0000
committerbothner <bothner@138bc75d-0d04-0410-961f-82ee72b054a4>2003-12-05 22:50:53 +0000
commitaaf491c2b55c44fc41aeb42295de90caaed47571 (patch)
tree85697fb074299b5a55735ea11b1d31e771753cae /gcc/cppfiles.c
parent497e64ebceb697b45e94f6c1efd1c69fe004d415 (diff)
downloadppe42-gcc-aaf491c2b55c44fc41aeb42295de90caaed47571.tar.gz
ppe42-gcc-aaf491c2b55c44fc41aeb42295de90caaed47571.zip
* cppfiles.c (file_hash_hash): New static function.
(hash_string_eq): Renamed static function to file_hash_eq. (_cpp_init_files): Create file_hash table with above callbacks. (cpp_included): Must use htab_find_with_hash insead of htab_find. (_cpp_find_find, make_cpp_dir): Must use htab_find_slot_with_hash. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@74350 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/cppfiles.c')
-rw-r--r--gcc/cppfiles.c33
1 files changed, 27 insertions, 6 deletions
diff --git a/gcc/cppfiles.c b/gcc/cppfiles.c
index 63e99212471..c2d91f581d8 100644
--- a/gcc/cppfiles.c
+++ b/gcc/cppfiles.c
@@ -172,7 +172,8 @@ static cpp_dir *make_cpp_dir (cpp_reader *, const char *dir_name, int sysp);
static void allocate_file_hash_entries (cpp_reader *pfile);
static struct file_hash_entry *new_file_hash_entry (cpp_reader *pfile);
static int report_missing_guard (void **slot, void *b);
-static int hash_string_eq (const void *p, const void *q);
+static hashval_t file_hash_hash (const void *p);
+static int file_hash_eq (const void *p, const void *q);
static char *read_filename_string (int ch, FILE *f);
static void read_name_map (cpp_dir *dir);
static char *remap_filename (cpp_reader *pfile, _cpp_file *file);
@@ -367,7 +368,9 @@ _cpp_find_file (cpp_reader *pfile, const char *fname, cpp_dir *start_dir, bool f
cpp_error (pfile, CPP_DL_ICE, "NULL directory in find_file");
hash_slot = (struct file_hash_entry **)
- htab_find_slot (pfile->file_hash, fname, INSERT);
+ htab_find_slot_with_hash (pfile->file_hash, fname,
+ htab_hash_string (fname),
+ INSERT);
/* First check the cache before we resort to memory allocation. */
entry = search_cache (*hash_slot, start_dir);
@@ -797,7 +800,9 @@ make_cpp_dir (cpp_reader *pfile, const char *dir_name, int sysp)
cpp_dir *dir;
hash_slot = (struct file_hash_entry **)
- htab_find_slot (pfile->file_hash, dir_name, INSERT);
+ htab_find_slot_with_hash (pfile->file_hash, dir_name,
+ htab_hash_string (dir_name),
+ INSERT);
/* Have we already hashed this directory? */
for (entry = *hash_slot; entry; entry = entry->next)
@@ -848,7 +853,8 @@ cpp_included (cpp_reader *pfile, const char *fname)
{
struct file_hash_entry *entry;
- entry = htab_find (pfile->file_hash, fname);
+ entry = htab_find_with_hash (pfile->file_hash, fname,
+ htab_hash_string (fname));
while (entry && (entry->start_dir == NULL || entry->u.file->err_no))
entry = entry->next;
@@ -856,9 +862,24 @@ cpp_included (cpp_reader *pfile, const char *fname)
return entry != NULL;
}
+/* Calculate the hash value of a file hash entry P. */
+
+static hashval_t
+file_hash_hash (const void *p)
+{
+ struct file_hash_entry *entry = (struct file_hash_entry *) p;
+ const char *hname;
+ if (entry->start_dir)
+ hname = entry->u.file->name;
+ else
+ hname = entry->u.dir->name;
+
+ return htab_hash_string (hname);
+}
+
/* Compare a string Q against a file hash entry P. */
static int
-hash_string_eq (const void *p, const void *q)
+file_hash_eq (const void *p, const void *q)
{
struct file_hash_entry *entry = (struct file_hash_entry *) p;
const char *fname = (const char *) q;
@@ -876,7 +897,7 @@ hash_string_eq (const void *p, const void *q)
void
_cpp_init_files (cpp_reader *pfile)
{
- pfile->file_hash = htab_create_alloc (127, htab_hash_string, hash_string_eq,
+ pfile->file_hash = htab_create_alloc (127, file_hash_hash, file_hash_eq,
NULL, xcalloc, free);
allocate_file_hash_entries (pfile);
}
OpenPOWER on IntegriCloud