#include "shared.h" #define _GNU_SOURCE #include "ll.h" #include "scanner.h" #include #include #include #include #include dlinkedlist * scandirlist(const char * const dir, int (*selector)(const struct dirent *), int (*cmp)(const struct dirent **, const struct dirent **)) { struct dirent **namelist = NULL; dlinkedlist *list = NULL; int numentries = -1; if((numentries = scandir(dir, &namelist, selector, cmp)) < 0) RETURNWERR(errno, NULL); list = dlinkedlist_init(); for(int i = 0; i < numentries; i++) if(dlinkedlist_append(list, (void *)(namelist[i]), free) < 0) { dlinkedlist_free(list); for(int j = i; j < numentries; j++) free(namelist[j]); free(namelist); RETURNWERR(errno, NULL); } free(namelist); return list; }