blob: 7c65df496964b63197947519a6b9d11e3977c7ce (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
#include "shared.h"
#define _GNU_SOURCE
#include "ll.h"
#include "scanner.h"
#include <stdlib.h>
#include <dirent.h>
#include <string.h>
#include <errno.h>
#include <error.h>
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);
RETURNWERR(errno, NULL);
}
free(namelist);
return list;
}
|