diff options
author | Tom Tromey <tromey@redhat.com> | 2005-09-30 00:33:26 +0000 |
---|---|---|
committer | Tom Tromey <tromey@gcc.gnu.org> | 2005-09-30 00:33:26 +0000 |
commit | 07f0879956c74d3ae0db9e83e5b35153979f4da3 (patch) | |
tree | 83c0b6cc2a21699fc5a0d65372bad7330a01849c /gcc/java | |
parent | edbcf8fd551af7ba17732703950e635bc3fccea5 (diff) | |
download | gcc-07f0879956c74d3ae0db9e83e5b35153979f4da3.zip gcc-07f0879956c74d3ae0db9e83e5b35153979f4da3.tar.gz gcc-07f0879956c74d3ae0db9e83e5b35153979f4da3.tar.bz2 |
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
Diffstat (limited to 'gcc/java')
-rw-r--r-- | gcc/java/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/java/jcf-io.c | 20 |
2 files changed, 23 insertions, 3 deletions
diff --git a/gcc/java/ChangeLog b/gcc/java/ChangeLog index 3cf82e3..b227a68 100644 --- a/gcc/java/ChangeLog +++ b/gcc/java/ChangeLog @@ -1,3 +1,9 @@ +2005-09-29 Tom Tromey <tromey@redhat.com> + + PR java/24120: + * jcf-io.c (memoized_dirlist_hash): New function. + (caching_stat): Use it. + 2005-09-21 Ranjit Mathew <rmathew@gcc.gnu.org> PR java/21418 diff --git a/gcc/java/jcf-io.c b/gcc/java/jcf-io.c index 383c7d7..9b9be0a 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. */ |