From e372af0c4253098fa10a3280691f4511ca21da55 Mon Sep 17 00:00:00 2001 From: Nathan Fisher Date: Fri, 18 Aug 2023 11:00:30 -0400 Subject: [PATCH] Return a valid target when adding to linkmap if it exists --- linkmap.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/linkmap.c b/linkmap.c index 215779d..33ae60d 100644 --- a/linkmap.c +++ b/linkmap.c @@ -39,6 +39,7 @@ #include #include #include +#include haggis_bucket* haggis_bucket_init(ino_t inode, uint64_t hash, char * path) { haggis_bucket *bucket; @@ -58,12 +59,18 @@ void haggis_bucket_deinit(haggis_bucket *nod) { free(nod); } -void haggis_bucket_append(haggis_bucket *head, haggis_bucket *tail) { +char* haggis_bucket_search_append(haggis_bucket *head, haggis_bucket *tail) { + char* target; while (head->next != NULL) { + if (head->key.val == tail->key.val) { + target = strndup(head->path, PATH_MAX - 1); + return target; + } head = head->next; } head->next = tail; + return NULL; } haggis_linkmap* haggis_linkmap_init() { @@ -131,7 +138,7 @@ char* haggis_linkmap_get_or_add(haggis_linkmap *map, ino_t inode, char * path) { } else { b = haggis_bucket_init(key.val, hash, path); if (b == NULL) return NULL; - haggis_bucket_append(&map->buckets[idx], b); + target = haggis_bucket_search_append(&map->buckets[idx], b); } return target; }