BarryServer : Git

All the code for all my projects
// BarryServer : Git / Nucleus / commit / 77a8df88b03707e14f840df6b0daeb9fa081f613 / vfs / direntry.c

// Related

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;
 }