|
|
|
@ -31,6 +31,7 @@ struct _config {
|
|
|
|
|
f2b_file_t *files; |
|
|
|
|
f2b_file_t *current; |
|
|
|
|
int flags; |
|
|
|
|
bool missingok; |
|
|
|
|
char path[256]; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
@ -147,10 +148,10 @@ config(cfg_t *cfg, const char *key, const char *value) {
|
|
|
|
|
assert(key != NULL); |
|
|
|
|
assert(value != NULL); |
|
|
|
|
|
|
|
|
|
/* no options */ |
|
|
|
|
(void)(cfg); /* suppress warning for unused variable 'ip' */ |
|
|
|
|
(void)(key); /* suppress warning for unused variable 'ip' */ |
|
|
|
|
(void)(value); /* suppress warning for unused variable 'ip' */ |
|
|
|
|
if (strcmp(key, "missingok") == 0) { |
|
|
|
|
cfg->missingok = (strcmp(value, "yes") == 0) ? true : false; |
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
@ -158,11 +159,15 @@ config(cfg_t *cfg, const char *key, const char *value) {
|
|
|
|
|
bool |
|
|
|
|
start(cfg_t *cfg) { |
|
|
|
|
f2b_file_t *file = NULL; |
|
|
|
|
int glob_flags = GLOB_MARK | GLOB_NOESCAPE; |
|
|
|
|
glob_t globbuf; |
|
|
|
|
|
|
|
|
|
assert(cfg != NULL); |
|
|
|
|
|
|
|
|
|
if (glob(cfg->path, GLOB_MARK | GLOB_NOESCAPE, NULL, &globbuf) != 0) |
|
|
|
|
if (cfg->missingok) |
|
|
|
|
glob_flags |= GLOB_NOCHECK; /* allow no matches */ |
|
|
|
|
|
|
|
|
|
if (glob(cfg->path, glob_flags, NULL, &globbuf) != 0) |
|
|
|
|
return NULL; |
|
|
|
|
|
|
|
|
|
for (size_t i = 0; i < globbuf.gl_pathc; i++) { |
|
|
|
@ -172,7 +177,7 @@ start(cfg_t *cfg) {
|
|
|
|
|
continue; |
|
|
|
|
} |
|
|
|
|
strlcpy(file->path, globbuf.gl_pathv[i], slen); |
|
|
|
|
if (!file_open(cfg, file)) { |
|
|
|
|
if (!file_open(cfg, file) && !cfg->missingok) { |
|
|
|
|
FREE(file); |
|
|
|
|
continue; |
|
|
|
|
} |
|
|
|
|