/* Return a directory entry for a given file NAME, or zero if none found. */ static struct directory * find_directory (const char *name) { if (! directory_table) return 0; else { char *caname = normalize_filename (name); struct directory *dir = make_directory (name, caname); struct directory *ret = hash_lookup (directory_table, dir); free_directory (dir); return ret; } }
/* Return a directory entry for a given combination of device and inode numbers, or zero if none found. */ static struct directory * find_directory_meta (dev_t dev, ino_t ino) { if (! directory_meta_table) return 0; else { struct directory *dir = make_directory ("", NULL); struct directory *ret; dir->device_number = dev; dir->inode_number = ino; ret = hash_lookup (directory_meta_table, dir); free_directory (dir); return ret; } }
void clear_directory_table (void) { struct directory *dp; if (directory_table) hash_clear (directory_table); if (directory_meta_table) hash_clear (directory_meta_table); for (dp = dirhead; dp; ) { struct directory *next = dp->next; free_directory (dp); dp = next; } dirhead = dirtail = NULL; }