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:   02-Aug-2007 20:38:20
  Branch: HEAD                             Handle: 2007080219381901

  Modified files:
    rpm                     CHANGES
    rpm/rpmdb               header.c

  Log:
    - teach headerGetExtension() to lookup extensions.
    - chain through new headerCompundFormats.

  Summary:
    Revision    Changes     Path
    1.1549      +2  -0      rpm/CHANGES
    1.57        +38 -1      rpm/rpmdb/header.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: rpm/CHANGES
  ============================================================================
  $ cvs diff -u -r1.1548 -r1.1549 CHANGES
  --- rpm/CHANGES       2 Aug 2007 18:04:32 -0000       1.1548
  +++ rpm/CHANGES       2 Aug 2007 18:38:19 -0000       1.1549
  @@ -1,4 +1,6 @@
   4.5 -> 5.0:
  +    - jbj: teach headerGetExtension() to lookup extensions.
  +    - jbj: chain through new headerCompundFormats.
       - jbj: refactor most header extensions from -lrpm to -lrpmdb. heh, no 
filenames, very sick and sad.
       - jbj: add headerGetExtension(), mapped to gud old stuff for now.
       - jbj: skeletal configgery for standalone index tables.
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmdb/header.c
  ============================================================================
  $ cvs diff -u -r1.56 -r1.57 header.c
  --- rpm/rpmdb/header.c        2 Aug 2007 17:30:12 -0000       1.56
  +++ rpm/rpmdb/header.c        2 Aug 2007 18:38:20 -0000       1.57
  @@ -1826,6 +1826,25 @@
       return NULL;
   }
   
  +/[EMAIL PROTECTED]@*/
  +extern headerTagIndices rpmTags;
  +
  +/**
  + * Return tag name from value.
  + * @param tag                tag value
  + * @return           tag name, "(unknown)" on not found
  + */
  +/[EMAIL PROTECTED]@*/
  +/[EMAIL PROTECTED]@*/ static inline /[EMAIL PROTECTED]@*/
  +const char * tagName(int tag)
  +     /[EMAIL PROTECTED]/
  +{
  +/[EMAIL PROTECTED]@*/
  +    return ((*rpmTags->tagName)(tag));
  +/[EMAIL PROTECTED]@*/
  +}
  +
  +/[EMAIL PROTECTED]@*/
   /** \ingroup header
    * Retrieve extension or tag value.
    *
  @@ -1844,7 +1863,25 @@
        /[EMAIL PROTECTED] *type, *p, *c @*/
        /[EMAIL PROTECTED] maxSet(type) >= 0 /\ maxSet(p) >= 0 /\ maxSet(c) >= 
0 @*/
   {
  -    return intGetEntry(h, tag, type, (hPTR_t *)p, c, 1);
  +    const struct headerSprintfExtension_s * e = headerCompoundFormats;
  +    const struct headerSprintfExtension_s * ext = NULL;
  +    const char * str = tagName(tag);
  +
  +    while (e->name) {
  +     if (e->type == HEADER_EXT_TAG && !xstrcasecmp(e->name + 7, str)) {
  +         ext = e;
  +         break;
  +     }
  +     e++;
  +     if (e->type == HEADER_EXT_MORE)
  +         e = e->u.more;
  +    }
  +
  +    if (ext) {
  +     int freeData = 0;       /* XXX lots of memory leaks. */
  +     return ext->u.tagFunction(h, type, p, c, &freeData);
  +    } else
  +     return intGetEntry(h, tag, type, (hPTR_t *)p, c, 1);
   }
   
   /** \ingroup header
  @@ .
______________________________________________________________________
RPM Package Manager                                    http://rpm5.org
CVS Sources Repository                                [email protected]

Reply via email to