aboutsummaryrefslogtreecommitdiff
path: root/gcc/java
diff options
context:
space:
mode:
authorTom Tromey <tromey@redhat.com>2005-09-30 00:33:26 +0000
committerTom Tromey <tromey@gcc.gnu.org>2005-09-30 00:33:26 +0000
commit07f0879956c74d3ae0db9e83e5b35153979f4da3 (patch)
tree83c0b6cc2a21699fc5a0d65372bad7330a01849c /gcc/java
parentedbcf8fd551af7ba17732703950e635bc3fccea5 (diff)
downloadgcc-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/ChangeLog6
-rw-r--r--gcc/java/jcf-io.c20
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. */