From a09a48c605a36e052446f47b4e0eb98f9b8398a2 Mon Sep 17 00:00:00 2001 From: Sebastien Blot Date: Thu, 18 Jan 2018 11:07:06 +0100 Subject: Add globbing support for configuration file path (closes #125) --- src/snuffleupagus.c | 34 ++++++++++++++++++++++++++++++---- 1 file changed, 30 insertions(+), 4 deletions(-) (limited to 'src/snuffleupagus.c') diff --git a/src/snuffleupagus.c b/src/snuffleupagus.c index 78a8659..32a4198 100644 --- a/src/snuffleupagus.c +++ b/src/snuffleupagus.c @@ -1,3 +1,5 @@ +#include + #ifdef HAVE_CONFIG_H #include "config.h" #endif @@ -182,15 +184,39 @@ static PHP_INI_MH(OnUpdateConfiguration) { } config_file = strtok(new_value->val, ","); - if (sp_parse_config(config_file) != SUCCESS) { - SNUFFLEUPAGUS_G(is_config_valid) = false; + + glob_t globbuf; + + int ret = glob(config_file, GLOB_BRACE|GLOB_NOCHECK, NULL, &globbuf); + + if (ret != 0) { return FAILURE; } - while ((config_file = strtok(NULL, ","))) { - if (sp_parse_config(config_file) != SUCCESS) { + + size_t i = 0; + while (globbuf.gl_pathv[i]) { + if (sp_parse_config(globbuf.gl_pathv[i]) != SUCCESS) { SNUFFLEUPAGUS_G(is_config_valid) = false; return FAILURE; } + i++; + } + globfree(&globbuf); + i = 0; + + while ((config_file = strtok(NULL, ","))) { + ret = glob(config_file, GLOB_BRACE|GLOB_NOCHECK, NULL, &globbuf); + if (ret != 0 ) { + return FAILURE; + } + while (globbuf.gl_pathv[i]) { + if (sp_parse_config(globbuf.gl_pathv[i]) != SUCCESS) { + SNUFFLEUPAGUS_G(is_config_valid) = false; + return FAILURE; + } + i++; + } + globfree(&globbuf); } SNUFFLEUPAGUS_G(is_config_valid) = true; -- cgit v1.3