Hello List, is there any further feedback or problems that need to be solved on this one or is it ok in its last state to get accepted? Thanks, Marc Am Freitag, den 11.09.2009, 12:35 +0200 schrieb Marc - A. Dahlhaus [ Administration | Westermann GmbH ]:
This patch adds the ability to use Include filenames containing wildcards.
Added a headercheck for glob.h to configure.ac. Added a globfree call to clean up the struct properly. Removed tilde expanding. Fixed a no debug print on GLOB_NOMATCH condition bug.
Signed-off-by: Marc-A. Dahlhaus <mad@wol.de> ---
--- pacman-3.3.0.orig/configure.ac +++ pacman-3.3.0/configure.ac @@ -150,7 +150,7 @@ fi AM_CONDITIONAL(INTERNAL_DOWNLOAD, test "x$internaldownload" = "xyes")
# Checks for header files. -AC_CHECK_HEADERS([fcntl.h libintl.h limits.h locale.h string.h strings.h sys/ioctl.h sys/param.h sys/statvfs.h sys/syslimits.h sys/time.h syslog.h wchar.h]) +AC_CHECK_HEADERS([fcntl.h glob.h libintl.h limits.h locale.h string.h strings.h sys/ioctl.h sys/param.h sys/statvfs.h sys/syslimits.h sys/time.h syslog.h wchar.h])
# Checks for typedefs, structures, and compiler characteristics. AC_C_INLINE --- pacman-3.3.0.orig/src/pacman/pacman.c +++ pacman-3.3.0/src/pacman/pacman.c @@ -38,6 +38,7 @@ #include <locale.h> /* setlocale */ #include <time.h> /* time_t */ #include <errno.h> +#include <glob.h> #if defined(PACMAN_DEBUG) && defined(HAVE_MCHECK_H) #include <mcheck.h> /* debug tracing (mtrace) */ #endif @@ -814,8 +815,24 @@ static int _parseconfig(const char *file } else { /* directives with settings */ if(strcmp(key, "Include") == 0) { - pm_printf(PM_LOG_DEBUG, "config: including %s\n", ptr); - _parseconfig(ptr, section, db); + int globret; + glob_t globbuf; + globret = glob(ptr, GLOB_NOCHECK, NULL, &globbuf); + switch(globret) { + case GLOB_NOSPACE: + pm_printf(PM_LOG_DEBUG, "config: include globing out of space \n"); + break; + case GLOB_ABORTED: + pm_printf(PM_LOG_DEBUG, "config: include globing read error for %s\n", ptr); + break; + default: + for(int gindex = 0; gindex < globbuf.gl_pathc; gindex++) { + pm_printf(PM_LOG_DEBUG, "config: including %s\n", globbuf.gl_pathv[gindex]); + _parseconfig(globbuf.gl_pathv[gindex], section, db); + } + break; + } + globfree(&globbuf); /* Ignore include failures... assume non-critical */ } else if(strcmp(section, "options") == 0) { if(strcmp(key, "NoUpgrade") == 0) {