From 55c72ac40c648560636fa26fd2326d16a5c6bd5d Mon Sep 17 00:00:00 2001 From: tromey Date: Fri, 30 Sep 2005 00:33:26 +0000 Subject: [PATCH] PR java/24120: * jcf-io.c (memoized_dirlist_hash): New function. (caching_stat): Use it. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@104809 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/java/ChangeLog | 6 ++++++ gcc/java/jcf-io.c | 20 +++++++++++++++++--- 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/gcc/java/ChangeLog b/gcc/java/ChangeLog index 3cf82e3efde..b227a68f7e7 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 383c7d74878..9b9be0a4f5a 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. */ -- 2.11.0