13 #include <sys/types.h>
54 size_t prefix_len = strlen(prefix);
57 while (pattern[i] && !strchr(
"/\\", pattern[i]))
59 if (strchr(
"?*", pattern[i]))
64 if (!is_pattern && pattern[i])
67 memcpy(prefix + prefix_len, pattern + off, i - off);
68 prefix[prefix_len + i - off] =
'\0';
69 glob_r(res, pattern, i, prefix);
70 prefix[prefix_len] =
'\0';
73 !is_pattern && !pattern[i])
75 strcpy(prefix + prefix_len, pattern + off);
80 DIR * dir = opendir(*prefix ? prefix :
"." );
86 while ((ent = readdir(dir)))
89 memcpy(prefix + prefix_len, pattern + off, i - off);
90 prefix[prefix_len + i - off] =
'\0';
92 prefix[prefix_len] =
'\0';
96 strcpy(prefix + prefix_len, ent->d_name);
99 glob_r(res, pattern, i, prefix);
105 prefix[prefix_len] =
'\0';
117 return strcmp(ent_a->
file, ent_b->
file);
136 ent_p = &ent[i]->
next;
148 char prefix[FILENAME_MAX+1];
153 (*res)->flags = flags;
154 (*res)->number_of_entries = 0;
157 (*res)->last_entry = &(*res)->entries;
158 glob_r(*res, pattern, 0, prefix);
wrapper for dirent.h or our own for Windows
static void add_entry(yaz_glob_res_t res, const char *str)
int yaz_file_glob(const char *pattern, yaz_glob_res_t *res)
perform glob
static int cmp_entry(const void *a, const void *b)
static void glob_r(yaz_glob_res_t res, const char *pattern, size_t off, char *prefix)
size_t yaz_file_glob_get_num(yaz_glob_res_t res)
return number of matching files
void yaz_file_globfree(yaz_glob_res_t *res)
release glob result
static void sort_them(yaz_glob_res_t res)
const char * yaz_file_glob_get_file(yaz_glob_res_t res, size_t idx)
return resulting matching file
int yaz_file_glob2(const char *pattern, yaz_glob_res_t *res, unsigned flags)
perform glob (with flags)
File globbing (ala POSIX glob, but simpler)
#define YAZ_FILE_GLOB_FAIL_NOTEXIST
int yaz_match_glob(const char *glob, const char *text)
matches a glob expression against text
NMEM nmem_create(void)
returns new NMEM handle
void * nmem_malloc(NMEM n, size_t size)
allocates memory block on NMEM handle
void nmem_destroy(NMEM n)
destroys NMEM handle and memory associated with it
Header for Nibble Memory functions.
char * nmem_strdup(NMEM mem, const char *src)
allocates string on NMEM handle (similar strdup)
struct res_entry * entries
struct res_entry ** last_entry
Header for WRBUF (growing buffer)