Nucleus
Barry FS Object wrapper functions 77a8df8 (3 years, 3 months ago)
diff --git a/vfs/direntry.c b/vfs/direntry.c
index a8a0110..7a0b559 100644
--- a/vfs/direntry.c
+++ b/vfs/direntry.c
@@ -16,6 +16,7 @@ static void direntry_delete(Object *);
/* Directory Entry object type */
ObjectType dirEntryType = {
+ .name = "DIRECTORY ENTRY",
.size = sizeof(DirEntry),
.delete = direntry_delete,
};
@@ -44,9 +45,11 @@ direntry_delete(Object *obj)
static int
compare_direntry_name(void *addr, void *data)
{
- DirEntry *entry = (void *) addr;
+ DirEntry *entry = addr;
struct FindData *find = data;
uint32_t hash = name_hash(find->name);
+ if (__builtin_expect(!(entry->hash), 0))
+ entry->hash = name_hash(entry->name);
if (entry->hash != hash)
return 0;
if (strcmp(entry->name, find->name))
@@ -59,13 +62,11 @@ compare_direntry_name(void *addr, void *data)
DirEntry *
find_direntry(ObjectList *list, const char *name)
{
- lock(list);
struct FindData data = {
.name = name,
.result = NULL,
};
iterate(list, compare_direntry_name, &data);
- unlock(list);
return data.result;
}