mirror of
https://codeberg.org/grunfink/snac2.git
synced 2024-12-25 00:43:38 +00:00
57 lines
1.3 KiB
C
57 lines
1.3 KiB
C
/* copyright (c) 2022 - 2024 grunfink et al. / MIT license */
|
|
|
|
#ifndef _XS_GLOB_H
|
|
|
|
#define _XS_GLOB_H
|
|
|
|
xs_list *xs_glob_n(const char *spec, int basename, int reverse, int mark, int max);
|
|
#define xs_glob(spec, basename, reverse) xs_glob_n(spec, basename, reverse, 0, XS_ALL)
|
|
#define xs_glob_m(spec, basename, reverse) xs_glob_n(spec, basename, reverse, 1, XS_ALL)
|
|
|
|
|
|
#ifdef XS_IMPLEMENTATION
|
|
|
|
#include <glob.h>
|
|
|
|
xs_list *xs_glob_n(const char *spec, int basename, int reverse, int mark, int max)
|
|
/* does a globbing and returns the found files */
|
|
{
|
|
glob_t globbuf;
|
|
xs_list *list = xs_list_new();
|
|
|
|
if (glob(spec, mark ? GLOB_MARK : 0, NULL, &globbuf) == 0) {
|
|
int n;
|
|
|
|
if (max > (int) globbuf.gl_pathc)
|
|
max = globbuf.gl_pathc;
|
|
|
|
for (n = 0; n < max; n++) {
|
|
char *p;
|
|
|
|
if (reverse)
|
|
p = globbuf.gl_pathv[globbuf.gl_pathc - n - 1];
|
|
else
|
|
p = globbuf.gl_pathv[n];
|
|
|
|
if (p != NULL) {
|
|
if (basename) {
|
|
if ((p = strrchr(p, '/')) == NULL)
|
|
continue;
|
|
|
|
p++;
|
|
}
|
|
|
|
list = xs_list_append(list, p);
|
|
}
|
|
}
|
|
}
|
|
|
|
globfree(&globbuf);
|
|
|
|
return list;
|
|
}
|
|
|
|
|
|
#endif /* XS_IMPLEMENTATION */
|
|
|
|
#endif /* _XS_GLOB_H */
|