RPM Community Forums

Mailing List Message of <rpm-devel>

Re: [CVS] RPM: rpm/ VENDOR rpm/build/ parsePreamble.c rpm/rpmio/ argv.c ar...

From: Jeff Johnson <n3npq@mac.com>
Date: Fri 14 Dec 2007 - 14:25:41 CET
Message-Id: <9796E1BE-9514-4189-BC05-A62CFFBAE975@mac.com>
Nice!

On Dec 14, 2007, at 6:22 AM, Ralf S. Engelschall wrote:

>   RPM Package Manager, CVS Repository
>   http://rpm5.org/cvs/
>    
> ______________________________________________________________________ 
> ______
>
>   Server: rpm5.org                         Name:   Ralf S. Engelschall
>   Root:   /v/rpm/cvs                       Email:  rse@rpm5.org
>   Module: rpm                              Date:   14-Dec-2007  
> 12:22:08
>   Branch: HEAD                             Handle: 2007121411220800
>
>   Modified files:
>     rpm                     VENDOR
>     rpm/build               parsePreamble.c
>     rpm/rpmio               argv.c argv.h
>
>   Log:
>     Apply another OpenPKG-specific change which is another  
> candicate for
>     being used for stock RPM, too: Allow wildcards in % 
> {_arbitrary_tags}
>     in order to support e.g. "%_arbitrary_tags My*" for custom but  
> clearly
>     distinguishable user headers, the matching of tagnames is done  
> via a
>     slower but more flexible linear search based on fnmatch(3)  
> instead of a
>     binary search based on strcasecmp(3).
>
>   Summary:
>     Revision    Changes     Path
>     2.9         +10 -0      rpm/VENDOR
>     2.158       +4  -0      rpm/build/parsePreamble.c
>     1.10        +37 -0      rpm/rpmio/argv.c
>     1.7         +34 -0      rpm/rpmio/argv.h
>    
> ______________________________________________________________________ 
> ______
>
>   patch -p0 <<'@@ .'
>   Index: rpm/VENDOR
>    
> ====================================================================== 
> ======
>   $ cvs diff -u -r2.8 -r2.9 VENDOR
>   --- rpm/VENDOR	13 Dec 2007 19:08:16 -0000	2.8
>   +++ rpm/VENDOR	14 Dec 2007 11:22:08 -0000	2.9
>   @@ -272,4 +272,14 @@
>         Reason:         This is a macro-frontend to realpath(3) and
>                         allows one to resolve a (relative) path into
>                         an absolute path.
>   +      
> ______________________________________________________________________ 
> __
>   +
>   +     Change:         wildcard-matching-arbitrary-tagnames
>   +     Purpose:        Allow wildcards in %{_arbitrary_tags}
>   +     Reason:         In order to support e.g. "%_arbitrary_tags  
> My*"
>   +                     for custom but clearly distinguishable user
>   +                     headers, the matching of tagnames is done  
> via a
>   +                     slower but more flexible linear search  
> based on
>   +                     fnmatch(3) instead of a binary search based on
>   +                     strcasecmp(3).
>
>   @@ .
>   patch -p0 <<'@@ .'
>   Index: rpm/build/parsePreamble.c
>    
> ====================================================================== 
> ======
>   $ cvs diff -u -r2.157 -r2.158 parsePreamble.c
>   --- rpm/build/parsePreamble.c	13 Dec 2007 19:08:16 -0000	2.157
>   +++ rpm/build/parsePreamble.c	14 Dec 2007 11:22:08 -0000	2.158
>   @@ -928,7 +928,11 @@
>    	if (aTags != NULL && aTags[0] != NULL) {
>    	    ARGV_t av;
>    	    s = tagCanonicalize(spec->line);
>   +#if defined(RPM_VENDOR_OPENPKG) /* wildcard-matching-arbitrary- 
> tagnames */
>   +	    av = argvSearchLinear(aTags, s, argvFnmatchCasefold);
>   +#else
>    	    av = argvSearch(aTags, s, argvStrcasecmp);
>   +#endif
>    	    if (av != NULL) {
>    		*tagp = tagGenerate(s);
>    		rc = 0;
>   @@ .
>   patch -p0 <<'@@ .'
>   Index: rpm/rpmio/argv.c
>    
> ====================================================================== 
> ======
>   $ cvs diff -u -r1.9 -r1.10 argv.c
>   --- rpm/rpmio/argv.c	2 Dec 2007 23:06:02 -0000	1.9
>   +++ rpm/rpmio/argv.c	14 Dec 2007 11:22:08 -0000	1.10
>   @@ -93,6 +93,22 @@
>        return xstrcasecmp(astr, bstr);
>    }
>
>   +#if defined(RPM_VENDOR_OPENPKG) /* wildcard-matching-arbitrary- 
> tagnames */
>   +int argvFnmatch(const void * a, const void * b)
>   +{
>   +    ARGstr_t astr = *(ARGV_t)a;
>   +    ARGstr_t bstr = *(ARGV_t)b;
>   +    return (fnmatch(astr, bstr, 0) == 0 ? 0 : 1);
>   +}
>   +
>   +int argvFnmatchCasefold(const void * a, const void * b)
>   +{
>   +    ARGstr_t astr = *(ARGV_t)a;
>   +    ARGstr_t bstr = *(ARGV_t)b;
>   +    return (fnmatch(astr, bstr, FNM_CASEFOLD) == 0 ? 0 : 1);
>   +}
>   +#endif
>   +
>    int argvSort(ARGV_t argv, int (*compar)(const void *, const void  
> *))
>    {
>        if (compar == NULL)
>   @@ -111,6 +127,27 @@
>        return bsearch(&val, argv, argvCount(argv), sizeof(*argv),  
> compar);
>    }
>
>   +#if defined(RPM_VENDOR_OPENPKG) /* wildcard-matching-arbitrary- 
> tagnames */
>   +ARGV_t argvSearchLinear(ARGV_t argv, ARGstr_t val,
>   +		int (*compar)(const void *, const void *))
>   +{
>   +    ARGV_t result;
>   +    ARGV_t av;
>   +    if (argv == NULL)
>   +        return NULL;
>   +    if (compar == NULL)
>   +        compar = argvCmp;
>   +    result = NULL;
>   +    for (av = argv; *av != NULL; av++) {
>   +        if (compar(av, &val) == 0) {
>   +            result = av;
>   +            break;
>   +        }
>   +    }
>   +    return result;
>   +}
>   +#endif
>   +
>    int argiAdd(/*@out@*/ ARGI_t * argip, int ix, int val)
>    {
>        ARGI_t argi;
>   @@ .
>   patch -p0 <<'@@ .'
>   Index: rpm/rpmio/argv.h
>    
> ====================================================================== 
> ======
>   $ cvs diff -u -r1.6 -r1.7 argv.h
>   --- rpm/rpmio/argv.h	2 Dec 2007 23:06:02 -0000	1.6
>   +++ rpm/rpmio/argv.h	14 Dec 2007 11:22:08 -0000	1.7
>   @@ -102,6 +102,26 @@
>    int argvStrcasecmp(const void * a, const void * b)
>    	/*@*/;
>
>   +#if defined(RPM_VENDOR_OPENPKG) /* wildcard-matching-arbitrary- 
> tagnames */
>   +/**
>   + * Wildcard-match argv arrays using fnmatch.
>   + * @param a		1st instance address
>   + * @param b		2nd instance address
>   + * @return		result of comparison
>   + */
>   +int argvFnmatch(const void * a, const void * b)
>   +	/*@*/;
>   +
>   +/**
>   + * Wildcard-match argv arrays using fnmatch (case-insensitive).
>   + * @param a		1st instance address
>   + * @param b		2nd instance address
>   + * @return		result of comparison
>   + */
>   +int argvFnmatchCasefold(const void * a, const void * b)
>   +	/*@*/;
>   +#endif
>   +
>    /**
>     * Sort an argv array.
>     * @param argv		argv array
>   @@ -123,6 +143,20 @@
>    		int (*compar)(const void *, const void *))
>    	/*@*/;
>
>   +#if defined(RPM_VENDOR_OPENPKG) /* wildcard-matching-arbitrary- 
> tagnames */
>   +/**
>   + * Find an element in an argv array (via linear searching and  
> just match/no-match comparison).
>   + * @param argv		argv array
>   + * @param val		string to find
>   + * @param compar	strcmp-like comparison function, or NULL for  
> argvCmp()
>   + * @return		found string (NULL on failure)
>   + */
>   +/*@dependent@*/ /*@null@*/
>   +ARGV_t argvSearchLinear(ARGV_t argv, ARGstr_t val,
>   +		int (*compar)(const void *, const void *))
>   +	/*@*/;
>   +#endif
>   +
>    /**
>     * Add an int to an argi array.
>     * @retval *argip	argi array
>   @@ .
> ______________________________________________________________________
> RPM Package Manager                                    http://rpm5.org
> CVS Sources Repository                                rpm-cvs@rpm5.org
Received on Fri Dec 14 14:26:45 2007
Driven by Jeff Johnson and the RPM project team.
Hosted by OpenPKG and Ralf S. Engelschall.
Powered by FreeBSD and OpenPKG.