settings: Use glob enumerator to load included files

This commit is contained in:
Tobias Brunner
2014-05-15 11:28:06 +02:00
parent 96de74b879
commit 3784633fa5
+13 -32
View File
@@ -24,10 +24,6 @@
#include <sys/stat.h> #include <sys/stat.h>
#include <unistd.h> #include <unistd.h>
#ifdef HAVE_GLOB_H
#include <glob.h>
#endif /* HAVE_GLOB_H */
#include "settings.h" #include "settings.h"
#include "collections/array.h" #include "collections/array.h"
@@ -1284,8 +1280,9 @@ static bool parse_file(linked_list_t *contents, char *file, int level,
static bool parse_files(linked_list_t *contents, char *file, int level, static bool parse_files(linked_list_t *contents, char *file, int level,
char *pattern, section_t *section) char *pattern, section_t *section)
{ {
enumerator_t *enumerator;
bool success = TRUE; bool success = TRUE;
char pat[PATH_MAX]; char pat[PATH_MAX], *expanded;
if (level > MAX_INCLUSION_LEVEL) if (level > MAX_INCLUSION_LEVEL)
{ {
@@ -1319,39 +1316,23 @@ static bool parse_files(linked_list_t *contents, char *file, int level,
} }
free(dir); free(dir);
} }
#ifdef HAVE_GLOB_H enumerator = enumerator_create_glob(pat);
if (enumerator)
{ {
int status; while (enumerator->enumerate(enumerator, &expanded, NULL))
glob_t buf;
status = glob(pat, GLOB_ERR, NULL, &buf);
if (status == GLOB_NOMATCH)
{ {
DBG1(DBG_LIB, "no files found matching '%s', ignored", pat); success &= parse_file(contents, expanded, level + 1, section);
} if (!success)
else if (status != 0)
{
DBG1(DBG_LIB, "expanding file pattern '%s' failed", pat);
success = FALSE;
}
else
{
char **expanded;
for (expanded = buf.gl_pathv; *expanded != NULL; expanded++)
{ {
success &= parse_file(contents, *expanded, level + 1, section); break;
if (!success)
{
break;
}
} }
} }
globfree(&buf); enumerator->destroy(enumerator);
}
else
{ /* if glob(3) is not available, try to load pattern directly */
success = parse_file(contents, pat, level + 1, section);
} }
#else /* HAVE_GLOB_H */
/* if glob(3) is not available, try to load pattern directly */
success = parse_file(contents, pat, level + 1, section);
#endif /* HAVE_GLOB_H */
return success; return success;
} }