X-Git-Url: http://git.sourceforge.jp/view?p=pf3gnuchains%2Fgcc-fork.git;a=blobdiff_plain;f=gcc%2Fjava%2Fjcf-io.c;h=9b9be0a4f5a1251c43bb0a1432bb59ff168506ef;hp=383c7d7487853e016b653abae0d509e84c62a5a8;hb=55c72ac40c648560636fa26fd2326d16a5c6bd5d;hpb=9ef9fa96a6908b90269e173dddf184de50191138 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. */