[pacman-dev] [RFC][PATCH] Introduce Include key globing for pacman.conf v4

Dan McGee dpmcgee at gmail.com
Sun Oct 11 23:06:01 EDT 2009


On Fri, Sep 11, 2009 at 5:35 AM, Marc - A. Dahlhaus [ Administration |
Westermann GmbH ] <mad at wol.de> wrote:
> 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 at wol.de>
> ---
Xavier, comments here? I kind of dropped this one on the floor, but a
quick review and I think it is good.

>
> --- 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) {
>
>
>
>


More information about the pacman-dev mailing list