RPM Package Manager, CVS Repository
  http://rpm5.org/cvs/
  ____________________________________________________________________________

  Server: rpm5.org                         Name:   Jeff Johnson
  Root:   /v/rpm/cvs                       Email:  [EMAIL PROTECTED]
  Module: rpm                              Date:   03-Nov-2007 14:19:24
  Branch: HEAD                             Handle: 2007110313192201

  Modified files:
    rpm                     CHANGES
    rpm/lib                 rpmrc.c
    rpm/rpmdb               rpmdb.c
    rpm/rpmio               macro.c rpmmacro.h

  Log:
    - jbj: add a getter to retrieve macros with used and/or pattern filtering.
    - jbj: macro macro table/element internals opaque.

  Summary:
    Revision    Changes     Path
    1.1763      +2  -0      rpm/CHANGES
    2.213       +1  -3      rpm/lib/rpmrc.c
    1.197       +1  -1      rpm/rpmdb/rpmdb.c
    2.148       +62 -1      rpm/rpmio/macro.c
    2.41        +24 -4      rpm/rpmio/rpmmacro.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: rpm/CHANGES
  ============================================================================
  $ cvs diff -u -r1.1762 -r1.1763 CHANGES
  --- rpm/CHANGES       2 Nov 2007 03:07:46 -0000       1.1762
  +++ rpm/CHANGES       3 Nov 2007 13:19:22 -0000       1.1763
  @@ -1,4 +1,6 @@
   4.5 -> 5.0:
  +    - jbj: add a getter to retrieve macros with used and/or pattern 
filtering.
  +    - jbj: macro macro table/element internals opaque.
       - jbj: fix --rebuilddb --root /path.
       - rse: fix linking of RPM against PCRE's POSIX API under --with-pcre
       - jbj: upgrade to F8 & fix rpm-python. i18n tags w hdr_subscript are 
b0rked.
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/lib/rpmrc.c
  ============================================================================
  $ cvs diff -u -r2.212 -r2.213 rpmrc.c
  --- rpm/lib/rpmrc.c   6 Oct 2007 21:33:48 -0000       2.212
  +++ rpm/lib/rpmrc.c   3 Nov 2007 13:19:23 -0000       2.213
  @@ -8,15 +8,13 @@
   #define __power_pc() 0
   #endif
   
  +#define _MIRE_INTERNAL
   #include <rpmio_internal.h> /* for rpmioSlurp() */
   #include <rpmcli.h>
   #include <rpmmacro.h>
   #include <rpmlua.h>
   #include <rpmds.h>
   
  -#define _MIRE_INTERNAL
  -#include <mire.h>
  -
   #include "misc.h"
   #include "debug.h"
   
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmdb/rpmdb.c
  ============================================================================
  $ cvs diff -u -r1.196 -r1.197 rpmdb.c
  --- rpm/rpmdb/rpmdb.c 2 Nov 2007 03:07:46 -0000       1.196
  +++ rpm/rpmdb/rpmdb.c 3 Nov 2007 13:19:23 -0000       1.197
  @@ -11,6 +11,7 @@
   #include <rpmio.h>
   #include <rpmpgp.h>
   #include <rpmurl.h>
  +#define      _MIRE_INTERNAL
   #include <rpmmacro.h>
   #include <rpmsq.h>
   #include <rpmtag.h>
  @@ -27,7 +28,6 @@
   #endif
   
   #define      _RPMDB_INTERNAL
  -#define      _MIRE_INTERNAL
   #include "rpmdb.h"
   #include "pkgio.h"
   #include "fprint.h"
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmio/macro.c
  ============================================================================
  $ cvs diff -u -r2.147 -r2.148 macro.c
  --- rpm/rpmio/macro.c 11 Oct 2007 13:04:28 -0000      2.147
  +++ rpm/rpmio/macro.c 3 Nov 2007 13:19:23 -0000       2.148
  @@ -68,6 +68,7 @@
   
   #endif
   
  +#define      _MACRO_INTERNAL
   #include <rpmmacro.h>
   
   #include "debug.h"
  @@ -201,7 +202,7 @@
       if (mc == NULL || mc->macroTable == NULL)
        return;
   
  -    qsort(mc->macroTable, mc->firstFree, sizeof(*(mc->macroTable)),
  +    qsort(mc->macroTable, mc->firstFree, sizeof(mc->macroTable[0]),
                compareMacroName);
   
       /* Empty pointers are now at end of table. Reset first free index. */
  @@ -213,6 +214,31 @@
       }
   }
   
  +static char * dupMacroEntry(MacroEntry me)
  +{
  +    char * t, * te;
  +    size_t nb;
  +
  +assert(me != NULL);
  +    nb = strlen(me->name) + sizeof("%") - 1;
  +    if (me->opts)
  +     nb += strlen(me->opts) + sizeof("()") - 1;
  +    if (me->body)
  +     nb += strlen(me->body) + sizeof("\t") - 1;
  +    nb++;
  +
  +    te = t = xmalloc(nb);
  +    *te = '\0';
  +    te = stpcpy( stpcpy(te, "%"), me->name);
  +    if (me->opts)
  +     te = stpcpy( stpcpy( stpcpy(te, "("), me->opts), ")");
  +    if (me->body)
  +     te = stpcpy( stpcpy(te, "\t"), me->body);
  +    *te = '\0';
  +
  +    return t;
  +}
  +
   void
   rpmDumpMacroTable(MacroContext mc, FILE * fp)
   {
  @@ -246,6 +272,41 @@
                nactive, nempty);
   }
   
  +int
  +rpmGetMacroEntries(MacroContext mc, miRE mire, int used,
  +             const char *** avp)
  +{
  +    const char ** av;
  +    int ac;
  +    int i;
  +
  +    if (mc == NULL)
  +     mc = rpmGlobalMacroContext;
  +
  +    if (avp == NULL)
  +     return mc->firstFree;
  +
  +    av = xcalloc( (mc->firstFree+1), sizeof(mc->macroTable[0]));
  +    if (mc->macroTable != NULL)
  +    for (i = 0; i < mc->firstFree; i++) {
  +     MacroEntry me;
  +     me = mc->macroTable[i];
  +     if (used > 0 && me->used < used)
  +         continue;
  +     if (used == 0 && me->used != 0)
  +         continue;
  +#if !defined(DEBUG_MACROS)   /* XXX preserve standalone build */
  +     if (mireRegexec(mire, me->name))
  +         continue;
  +#endif
  +     av[ac++] = dupMacroEntry(me);
  +    }
  +    av[ac] = NULL;
  +    *avp = av = xrealloc(av, (ac+1) * sizeof(*av));
  +    
  +    return ac;
  +}
  +
   /**
    * Find entry in macro table.
    * @param mc         macro context
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmio/rpmmacro.h
  ============================================================================
  $ cvs diff -u -r2.40 -r2.41 rpmmacro.h
  --- rpm/rpmio/rpmmacro.h      6 Oct 2007 19:40:23 -0000       2.40
  +++ rpm/rpmio/rpmmacro.h      3 Nov 2007 13:19:23 -0000       2.41
  @@ -1,12 +1,17 @@
   #ifndef _H_MACRO_
   #define      _H_MACRO_
   
  +#include <mire.h>
  +
   /** \ingroup rpmio
    * \file rpmio/rpmmacro.h
    */
  +typedef /[EMAIL PROTECTED]@*/ struct MacroEntry_s * MacroEntry;
  +typedef /[EMAIL PROTECTED]@*/ struct MacroContext_s * MacroContext;
   
  +#if defined(_MACRO_INTERNAL)
   /*! The structure used to store a macro. */
  -typedef /[EMAIL PROTECTED]@*/ struct MacroEntry_s {
  +struct MacroEntry_s {
       struct MacroEntry_s *prev;       /*!< Macro entry stack. */
       const char *name;                /*!< Macro name. */
       const char *opts;                /*!< Macro parameters (a la getopt) */
  @@ -14,15 +19,16 @@
       int      used;                   /*!< No. of expansions. */
       short level;             /*!< Scoping level. */
       unsigned short flags;    /*!< Flags. */
  -} * MacroEntry;
  +};
   
   /*! The structure used to store the set of macros in a context. */
  -typedef /[EMAIL PROTECTED]@*/ struct MacroContext_s {
  +struct MacroContext_s {
   /[EMAIL PROTECTED]@*//[EMAIL PROTECTED]@*/
       MacroEntry *macroTable;  /*!< Macro entry table for context. */
       int      macrosAllocated;        /*!< No. of allocated macros. */
       int      firstFree;              /*!< No. of macros. */
  -} * MacroContext;
  +};
  +#endif
   
   /[EMAIL PROTECTED]@*/
   /[EMAIL PROTECTED]@*/
  @@ -67,6 +73,20 @@
        /[EMAIL PROTECTED] *fp, fileSystem @*/;
   
   /**
  + * Return macro entries as string array.
  + * @param mc         macro context (NULL uses global context)
  + * @param mire               pattern to match (NULL disables)
  + * @param used               macro usage (<0 all, =0 unused, >=1 used count)
  + * @retval *avp              macro definitions
  + * @return           no. of entries
  + */
  +int
  +rpmGetMacroEntries(/[EMAIL PROTECTED]@*/ MacroContext mc, /[EMAIL 
PROTECTED]@*/ miRE mire,
  +             int used, /[EMAIL PROTECTED]@*/ const char *** avp)
  +     /[EMAIL PROTECTED] rpmGlobalMacroContext @*/
  +     /[EMAIL PROTECTED] *avp @*/;
  +
  +/**
    * Return URL path(s) from a (URL prefixed) pattern glob.
    * @param patterns   glob pattern
    * @retval *argcPtr  no. of paths
  @@ .
______________________________________________________________________
RPM Package Manager                                    http://rpm5.org
CVS Sources Repository                                rpm-cvs@rpm5.org

Reply via email to