49 lines
No EOL
1.2 KiB
Markdown
49 lines
No EOL
1.2 KiB
Markdown
# Dir
|
|
----------
|
|
|
|
This header provides a simple directory walker, here is an example usage:
|
|
|
|
```c
|
|
typedef struct source_t {
|
|
str_t filename;
|
|
struct source_t *next;
|
|
} source_t;
|
|
|
|
sources_t get_sources(arena_t *arena, strview_t path) {
|
|
uint8 tmpbuf[KB(5)] = {0};
|
|
arena_t scratch = arenaMake(ARENA_STATIC, sizeof(tmpbuf), tmpbuf);
|
|
|
|
dir_t *dir = dirOpen(&scratch, path);
|
|
dir_entry_t *entry = NULL;
|
|
|
|
source_t *sources = NULL;
|
|
|
|
while ((entry = dirNext(&scratch, dir))) {
|
|
if (entry->type != DIRTYPE_FILE) {
|
|
continue;
|
|
}
|
|
|
|
strview_t ext = fileGetExtension(strv(entry->name));
|
|
if (!strvEquals(ext, strv(".c"))) {
|
|
continue;
|
|
}
|
|
|
|
source_t *new_source = alloc(arena, source_t);
|
|
new_source->filename = strFmt(arena, "%v/%v", path, entry->name);
|
|
new_source->next = sources;
|
|
sources = new_source;
|
|
}
|
|
|
|
return sources;
|
|
}
|
|
|
|
int main() {
|
|
arena_t arena = arenaMake(ARENA_VIRTUAL, GB(1));
|
|
source_t *sources = get_sources(&arena, strv("src/colla"));
|
|
while (sources) {
|
|
info("> %v", sources->filename);
|
|
sources = sources->next;
|
|
}
|
|
arenaCleanup(&arena);
|
|
}
|
|
``` |