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:   21-Oct-2007 02:25:24
  Branch: HEAD                             Handle: 2007102101252301

  Modified files:
    rpm                     CHANGES
    rpm/rpmdb               hdrinline.h header.c header.h

  Log:
    - hmmm, b0rken --fileclass et al extensions in lib/format.c, todo++.
    - mark private extension handling for destruction, enabled for now.
    - permit headerSprintf tbls/exts args tp be NULL using sane default.

  Summary:
    Revision    Changes     Path
    1.1747      +3  -0      rpm/CHANGES
    1.22        +6  -6      rpm/rpmdb/hdrinline.h
    1.107       +62 -21     rpm/rpmdb/header.c
    1.51        +5  -5      rpm/rpmdb/header.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: rpm/CHANGES
  ============================================================================
  $ cvs diff -u -r1.1746 -r1.1747 CHANGES
  --- rpm/CHANGES       20 Oct 2007 23:22:06 -0000      1.1746
  +++ rpm/CHANGES       21 Oct 2007 00:25:23 -0000      1.1747
  @@ -1,4 +1,7 @@
   4.5 -> 5.0:
  +    - jbj: hmmm, b0rken --fileclass et al extensions in lib/format.c, todo++.
  +    - jbj: mark private extension handling for destruction, enabled for now.
  +    - jbj: permit headerSprintf tbls/exts args tp be NULL using sane default.
       - jbj: start using headerGetExtension under headerSprintf.
       - jbj: prime the tag data cache earlier.
       - jbj: enable Plan B tag data caching.
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmdb/hdrinline.h
  ============================================================================
  $ cvs diff -u -r1.21 -r1.22 hdrinline.h
  --- rpm/rpmdb/hdrinline.h     19 Oct 2007 00:36:47 -0000      1.21
  +++ rpm/rpmdb/hdrinline.h     21 Oct 2007 00:25:24 -0000      1.22
  @@ -449,19 +449,19 @@
    *
    * @param h          header
    * @param fmt                format to use
  - * @param tbltags    array of tag name/value pairs
  - * @param extensions chained table of formatting extensions.
  + * @param tags               array of tag name/value/type triples (NULL uses 
default)
  + * @param exts               formatting extensions chained table (NULL uses 
default)
    * @retval errmsg    error message (if any)
    * @return           formatted output string (malloc'ed)
    */
   /[EMAIL PROTECTED]@*/ static inline
   /[EMAIL PROTECTED]@*/ char * headerSprintf(Header h, const char * fmt,
  -                  const struct headerTagTableEntry_s * tbltags,
  -                  const struct headerSprintfExtension_s * extensions,
  -                  /[EMAIL PROTECTED]@*/ /[EMAIL PROTECTED]@*/ errmsg_t * 
errmsg)
  +             /[EMAIL PROTECTED]@*/ const struct headerTagTableEntry_s * tags,
  +             /[EMAIL PROTECTED]@*/ const struct headerSprintfExtension_s * 
exts,
  +             /[EMAIL PROTECTED]@*/ /[EMAIL PROTECTED]@*/ errmsg_t * errmsg)
        /[EMAIL PROTECTED] *errmsg @*/
   {
  -    return (h2hv(h)->hdrsprintf) (h, fmt, tbltags, extensions, errmsg);
  +    return (h2hv(h)->hdrsprintf) (h, fmt, tags, exts, errmsg);
   }
   
   /** \ingroup header
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmdb/header.c
  ============================================================================
  $ cvs diff -u -r1.106 -r1.107 header.c
  --- rpm/rpmdb/header.c        20 Oct 2007 23:22:06 -0000      1.106
  +++ rpm/rpmdb/header.c        21 Oct 2007 00:25:24 -0000      1.107
  @@ -6,6 +6,12 @@
   /* XXX work in progress, caveat emptor. */
   #define SUPPORT_LINEAR_TAGTABLE_LOOKUP       1
   
  +#define      SUPPORT_SPRINTF_TAGTABLE        1
  +
  +#if 1        /* XXX undefining loses the extensions in lib/formats.c. */
  +#define      SUPPORT_SPRINTF_EXTTABLE        1
  +#endif
  +
   static int _jbj = 0;    /* XXX private debugging */
   
   /* RPM - Copyright (C) 1995-2002 Red Hat Software */
  @@ -1783,6 +1789,26 @@
       return NULL;
   }
   
  +/**
  + * Automatically generated table of tag name/value pairs.
  + * @todo This should come from #include <rpmtag.h>.
  + */
  +/[EMAIL PROTECTED]@*/
  +/[EMAIL PROTECTED]@*/ /[EMAIL PROTECTED]@*/
  +extern const struct headerTagTableEntry_s * rpmTagTable;
  +/[EMAIL PROTECTED]@*/
  +
  +/**
  + * Number of entries in rpmTagTable.
  + * @todo This should come from #include <rpmtag.h>.
  + */
  +/[EMAIL PROTECTED]@*/
  +/[EMAIL PROTECTED]@*/
  +extern const int rpmTagTableSize;
  +
  +/**
  + * @todo This should come from #include <rpmtag.h>.
  + */
   /[EMAIL PROTECTED]@*/
   /[EMAIL PROTECTED]@*/
   extern headerTagIndices rpmTags;
  @@ -1790,6 +1816,7 @@
   
   /**
    * Return tag name from value.
  + * @todo This should come from #include <rpmtag.h>.
    * @param tag                tag value
    * @return           tag name, "(unknown)" on not found
    */
  @@ -1805,6 +1832,7 @@
   
   /**
    * Return tag data type from value.
  + * @todo This should come from #include <rpmtag.h>.
    * @param tag                tag value
    * @return           tag data type, RPM_NULL_TYPE on not found.
    */
  @@ -1819,6 +1847,7 @@
   
   /**
    * Return tag value from name.
  + * @todo This should come from #include <rpmtag.h>.
    * @param tagstr     name of tag
    * @return           tag value, -1 on not found
    */
  @@ -3532,6 +3561,7 @@
       return 0;
   }
   
  +#if defined(SUPPORT_SPRINTF_EXTTABLE)
   /**
    * Call a header extension only once, saving results.
    * @param hsa                headerSprintf args
  @@ -3569,6 +3599,7 @@
   
       return 0;
   }
  +#endif       /* SUPPORT_SPRINTF_EXTTABLE */
   
   /**
    * Format a single item's value.
  @@ -3592,6 +3623,8 @@
       HE_t vhe = memset(alloca(sizeof(*vhe)), 0, sizeof(*vhe));
       int_64 ival = 0;
   
  +/* XXX likely need to check !he->avail and he->tag == tag->tagno. */
  +#if defined(SUPPORT_SPRINTF_EXTTABLE)
       if (tag->ext) {
        if (getExtension(hsa, tag->ext, &he->t, &he->p, &he->c, hsa->ec + 
tag->extNum))
        {
  @@ -3601,17 +3634,13 @@
            he->freeData = 0;
        }
       } else
  -    if (!he->avail) {
  +#endif       /* SUPPORT_SPRINTF_EXTTABLE */
  +    if (!he->avail || he->tag != tag->tagno) {
  +     he = rpmheClean(he);
        he->tag = tag->tagno;   /* XXX necessary? */
  -#ifdef       DYING
  -     xx = headerGetEntry(hsa->h, he->tag, &he->t, &he->p, &he->c);
  -     if (xx)
  -         rpmheMark(he);
  -#else
        xx = headerGetExtension(hsa->h, he->tag, &he->t, &he->p, &he->c);
        if (xx && he->p.ptr != NULL)
            he->freeData = 1;
  -#endif
        if (!xx) {
            he->c = 1;
            he->t = RPM_STRING_TYPE;    
  @@ -3804,21 +3833,20 @@
                continue;
   
            he = &tag->he;
  +/* XXX likely need to check !he->avail and he->tag == tag->tagno. */
  +#if defined(SUPPORT_SPRINTF_EXTTABLE)
            if (tag->ext) {
                if (getExtension(hsa, tag->ext, &he->t, &he->p, &he->c, 
                                 hsa->ec + tag->extNum))
                     continue;
  -         } else {
  +         } else
  +#endif       /* SUPPORT_SPRINTF_EXTTABLE */
  +         if (!he->avail || he->tag != tag->tagno) {
  +             he = rpmheClean(he);
                he->tag = tag->tagno;
  -#ifdef       DYING
  -             xx = headerGetEntry(hsa->h, he->tag, &he->t, &he->p, &he->c);
  -             if (xx)
  -                 he = rpmheMark(he);
  -#else
                xx = headerGetExtension(hsa->h, he->tag, &he->t, &he->p, 
&he->c);
                if (xx && he->p.ptr != NULL)
                    he->freeData = 1;
  -#endif
                if (!xx)
                    continue;
   if (_jbj)
  @@ -3958,6 +3986,7 @@
       return (hsa->val + hsa->vallen);
   }
   
  +#if defined(SUPPORT_SPRINTF_EXTTABLE)
   /**
    * Create an extension cache.
    * @param exts               headerSprintf extensions
  @@ -4008,6 +4037,7 @@
       ec = _free(ec);
       return NULL;
   }
  +#endif       /* SUPPORT_SPRINTF_EXTTABLE */
   
   /** \ingroup header
    * Return formatted output string from header tags.
  @@ -4015,16 +4045,16 @@
    *
    * @param h          header
    * @param fmt                format to use
  - * @param tbltags    array of tag name/value pairs
  - * @param extensions chained table of formatting extensions.
  + * @param tags               array of tag name/value/type triples (NULL uses 
default)
  + * @param exts               formatting extensions chained table (NULL uses 
default)
    * @retval *errmsg   error message (if any)
    * @return           formatted output string (malloc'ed)
    */
   static /[EMAIL PROTECTED]@*/ /[EMAIL PROTECTED]@*/
   char * headerSprintf(Header h, const char * fmt,
  -                  const struct headerTagTableEntry_s * tbltags,
  -                  const struct headerSprintfExtension_s * extensions,
  -                  /[EMAIL PROTECTED]@*/ /[EMAIL PROTECTED]@*/ errmsg_t * 
errmsg)
  +             /[EMAIL PROTECTED]@*/ const struct headerTagTableEntry_s * tags,
  +             /[EMAIL PROTECTED]@*/ const struct headerSprintfExtension_s * 
exts,
  +             /[EMAIL PROTECTED]@*/ /[EMAIL PROTECTED]@*/ errmsg_t * errmsg)
        /[EMAIL PROTECTED] h, *errmsg @*/
        /[EMAIL PROTECTED] maxSet(errmsg) >= 0 @*/
   {
  @@ -4035,13 +4065,20 @@
       int isxml;
       int isyaml;
       int need;
  +
  +    /* Set some reasonable defaults */
  +    if (tags == NULL)
  +     tags = rpmTagTable;
  +    /* XXX this loses the extensions in lib/formats.c. */
  +    if (exts == NULL)
  +     exts = headerCompoundFormats;
    
       hsa->h = headerLink(h);
       hsa->fmt = xstrdup(fmt);
   /[EMAIL PROTECTED]@*/        /* FIX: legacy API shouldn't change. */
  -    hsa->exts = (headerSprintfExtension) extensions;
  +    hsa->exts = (headerSprintfExtension) exts;
   #if defined(SUPPORT_LINEAR_TAGTABLE_LOOKUP)
  -    hsa->tags = (headerTagTableEntry) tbltags;
  +    hsa->tags = (headerTagTableEntry) tags;
   #endif
   /[EMAIL PROTECTED]@*/
       hsa->errmsg = NULL;
  @@ -4049,8 +4086,10 @@
       if (parseFormat(hsa, hsa->fmt, &hsa->format, &hsa->numTokens, NULL, 
PARSER_BEGIN))
        goto exit;
   
  +#if defined(SUPPORT_SPRINTF_EXTTABLE)
       hsa->nec = 0;
       hsa->ec = rpmecNew(hsa->exts, &hsa->nec);
  +#endif       /* SUPPORT_SPRINTF_EXTTABLE */
   #ifdef       NOTYET
       hsa->ntc = numTokens;
       hsa->tc = rpmtcNew(hsa->ntc);
  @@ -4105,8 +4144,10 @@
       if (hsa->val != NULL && hsa->vallen < hsa->alloced)
        hsa->val = xrealloc(hsa->val, hsa->vallen+1);   
   
  +#if defined(SUPPORT_SPRINTF_EXTTABLE)
       hsa->ec = rpmecFree(hsa->exts, hsa->ec);
       hsa->nec = 0;
  +#endif       /* SUPPORT_SPRINTF_EXTTABLE */
   #ifdef       NOTYET
       hsa->tc = rpmtcFree(hsa->tc, hsa->ntc);
       hsa->ntc = 0;
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmdb/header.h
  ============================================================================
  $ cvs diff -u -r1.50 -r1.51 header.h
  --- rpm/rpmdb/header.h        20 Oct 2007 15:10:37 -0000      1.50
  +++ rpm/rpmdb/header.h        21 Oct 2007 00:25:24 -0000      1.51
  @@ -727,16 +727,16 @@
    *
    * @param h          header
    * @param fmt                format to use
  - * @param tags               array of tag name/value pairs
  - * @param extensions chained table of formatting extensions.
  + * @param tags               array of tag name/value/type triples (NULL uses 
default)
  + * @param exts               formatting extensions chained table (NULL uses 
default)
    * @retval errmsg    error message (if any)
    * @return           formatted output string (malloc'ed)
    */
   typedef
   /[EMAIL PROTECTED]@*/ char * (*HDRsprintf) (Header h, const char * fmt,
  -                  const struct headerTagTableEntry_s * tags,
  -                  const struct headerSprintfExtension_s * extensions,
  -                  /[EMAIL PROTECTED]@*/ /[EMAIL PROTECTED]@*/ errmsg_t * 
errmsg)
  +             /[EMAIL PROTECTED]@*/ const struct headerTagTableEntry_s * tags,
  +             /[EMAIL PROTECTED]@*/ const struct headerSprintfExtension_s * 
exts,
  +             /[EMAIL PROTECTED]@*/ /[EMAIL PROTECTED]@*/ errmsg_t * errmsg)
        /[EMAIL PROTECTED] *errmsg @*/;
   
   /** \ingroup header
  @@ .
______________________________________________________________________
RPM Package Manager                                    http://rpm5.org
CVS Sources Repository                                [email protected]

Reply via email to