1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- #ifndef _XS_GLOB_H
- #define _XS_GLOB_H
- xs_list *xs_glob_n(const char *spec, int basename, int reverse, int max);
- #define xs_glob(spec, basename, reverse) xs_glob_n(spec, basename, reverse, XS_ALL)
- #ifdef XS_IMPLEMENTATION
- #include <glob.h>
- xs_list *xs_glob_n(const char *spec, int basename, int reverse, int max)
- {
- glob_t globbuf;
- xs_list *list = xs_list_new();
- if (glob(spec, 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
- #endif
|