#include "linklist.h" #include #include #include int haggis_linklist_push(haggis_hardlink_list *list, haggis_hardlink *link) { pthread_mutex_lock(list->mutex); link->next = list->head; list->head = link; return pthread_mutex_unlock(list->mutex); } haggis_hardlink* haggis_linklist_get(haggis_hardlink_list *list, ino_t inode) { haggis_hardlink *link; pthread_mutex_lock(list->mutex); link = list->head; while(link != NULL) { if (link->inode == inode) { return link; } link = link->next; } pthread_mutex_unlock(list->mutex); return NULL; } char* haggis_linklist_get_or_put(haggis_hardlink_list *list, ino_t inode, char *fname) { haggis_hardlink *link; link = haggis_linklist_get(list, inode); if (link == NULL) { link = malloc(sizeof(haggis_hardlink)); if (link == NULL) return NULL; link->inode = inode; link->next = NULL; haggis_linklist_push(list, link); } else { return link->fname; } return NULL; } void haggis_linklist_drain(haggis_hardlink_list *list) { haggis_hardlink *link; haggis_hardlink *next; pthread_mutex_lock(list->mutex); link = list->head; while (link != NULL) { next = link->next; free(link); link = next; } pthread_mutex_unlock(list->mutex); }