From: Tom Tromey Date: Fri, 30 Sep 2005 00:33:26 +0000 (+0000) Subject: re PR java/24120 (jc1 incorrectly uses libiberty hashes) X-Git-Tag: misc/cutover-cvs2svn~403 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=07f0879956c74d3ae0db9e83e5b35153979f4da3;p=thirdparty%2Fgcc.git re PR java/24120 (jc1 incorrectly uses libiberty hashes) PR java/24120: * jcf-io.c (memoized_dirlist_hash): New function. (caching_stat): Use it. From-SVN: r104809 --- diff --git a/gcc/java/ChangeLog b/gcc/java/ChangeLog index 3cf82e3efde3..b227a68f7e7b 100644 --- a/gcc/java/ChangeLog +++ b/gcc/java/ChangeLog @@ -1,3 +1,9 @@ +2005-09-29 Tom Tromey + + PR java/24120: + * jcf-io.c (memoized_dirlist_hash): New function. + (caching_stat): Use it. + 2005-09-21 Ranjit Mathew PR java/21418 diff --git a/gcc/java/jcf-io.c b/gcc/java/jcf-io.c index 383c7d748785..9b9be0a4f5a1 100644 --- a/gcc/java/jcf-io.c +++ b/gcc/java/jcf-io.c @@ -311,6 +311,14 @@ typedef struct memoized_dirlist_entry struct dirent **files; } memoized_dirlist_entry; +/* A hash function for a memoized_dirlist_entry. */ +static hashval_t +memoized_dirlist_hash (const void *entry) +{ + const memoized_dirlist_entry *mde = (const memoized_dirlist_entry *) entry; + return htab_hash_string (mde->dir); +} + /* Returns true if ENTRY (a memoized_dirlist_entry *) corresponds to the directory given by KEY (a char *) giving the directory name. */ @@ -341,11 +349,12 @@ caching_stat (char *filename, struct stat *buf) char *base; memoized_dirlist_entry *dent; void **slot; + struct memoized_dirlist_entry temp; /* If the hashtable has not already been created, create it now. */ if (!memoized_dirlists) memoized_dirlists = htab_create (37, - htab_hash_string, + memoized_dirlist_hash, memoized_dirlist_lookup_eq, NULL); @@ -364,8 +373,13 @@ caching_stat (char *filename, struct stat *buf) else base = filename; - /* Obtain the entry for this directory from the hash table. */ - slot = htab_find_slot (memoized_dirlists, filename, INSERT); + /* Obtain the entry for this directory from the hash table. This + approach is ok since we know that the hash function only looks at + the directory name. */ + temp.dir = filename; + temp.num_files = 0; + temp.files = NULL; + slot = htab_find_slot (memoized_dirlists, &temp, INSERT); if (!*slot) { /* We have not already scanned this directory; scan it now. */