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:   20-Oct-2007 17:37:39
  Branch: HEAD                             Handle: 2007102016373900

  Modified files:
    rpm                     CHANGES
    rpm/rpmdb               header.c

  Log:
    - jbj: add tag data cache.

  Summary:
    Revision    Changes     Path
    1.1742      +1  -0      rpm/CHANGES
    1.102       +43 -1      rpm/rpmdb/header.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: rpm/CHANGES
  ============================================================================
  $ cvs diff -u -r1.1741 -r1.1742 CHANGES
  --- rpm/CHANGES       20 Oct 2007 15:10:36 -0000      1.1741
  +++ rpm/CHANGES       20 Oct 2007 15:37:39 -0000      1.1742
  @@ -1,4 +1,5 @@
   4.5 -> 5.0:
  +    - jbj: add tag data cache.
       - jbj: eliminate rpmec data type.
       - jbj: merge rpmec into HE_t.
       - jbj: not yet for binary search retrieve using tagValue.
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmdb/header.c
  ============================================================================
  $ cvs diff -u -r1.101 -r1.102 header.c
  --- rpm/rpmdb/header.c        20 Oct 2007 15:10:37 -0000      1.101
  +++ rpm/rpmdb/header.c        20 Oct 2007 15:37:39 -0000      1.102
  @@ -3837,6 +3837,7 @@
   /**
    * Create an extension cache.
    * @param exts               headerSprintf extensions
  + * @retval *necp     no. of elements
    * @return           new extension cache
    */
   static /[EMAIL PROTECTED]@*/ HE_t
  @@ -3856,7 +3857,7 @@
   
       ec = xcalloc(extNum+1, sizeof(*ec));
       if (*necp)
  -     necp = extNum;
  +     *necp = extNum;
       return ec;
   }
   
  @@ -3884,6 +3885,42 @@
       return NULL;
   }
   
  +/**
  + * Create tag data cache.
  + * @param ntc                no. of elements
  + * @return           new tag data cache
  + */
  +static /[EMAIL PROTECTED]@*/ HE_t
  +rpmtcNew(int ntc)
  +     /[EMAIL PROTECTED]/
  +{
  +    HE_t ec = xcalloc(ntc+1, sizeof(*ec));
  +    return ec;
  +}
  +
  +/**
  + * Destroy tag data cache.
  + * @param tc         tag data cache
  + * @param ntc                no. of elements
  + * @return           NULL always
  + */
  +static /[EMAIL PROTECTED]@*/ HE_t
  +rpmtcFree(/[EMAIL PROTECTED]@*/ HE_t tc, int ntc)
  +     /[EMAIL PROTECTED] ec @*/
  +{
  +    int i;
  +
  +    if (tc != NULL)
  +    for (i = 0; i < ntc; i++) {
  +     HE_t he = tc + i;
  +     if (he->freeData)
  +         he->p.ptr = _free(he->p.ptr);
  +     memset(tc, 0, sizeof(*tc));
  +    }
  +    tc = _free(tc);
  +    return NULL;
  +}
  +
   /** \ingroup header
    * Return formatted output string from header tags.
    * The returned string must be free()d.
  @@ -3924,7 +3961,10 @@
       if (parseFormat(hsa, hsa->fmt, &hsa->format, &hsa->numTokens, NULL, 
PARSER_BEGIN))
        goto exit;
   
  +    hsa->nec = 0;
       hsa->ec = rpmecNew(hsa->exts, &hsa->nec);
  +    hsa->ntc = hsa->numTokens;
  +    hsa->tc = rpmtcNew(hsa->ntc);
       hsa->val = xstrdup("");
   
       tag =
  @@ -3977,6 +4017,8 @@
   
       hsa->ec = rpmecFree(hsa->exts, hsa->ec);
       hsa->nec = 0;
  +    hsa->tc = rpmtcFree(hsa->tc, hsa->ntc);
  +    hsa->ntc = 0;
       hsa->format = freeFormat(hsa->format, hsa->numTokens);
   
   exit:
  @@ .
______________________________________________________________________
RPM Package Manager                                    http://rpm5.org
CVS Sources Repository                                [email protected]

Reply via email to