RPM Community Forums

Mailing List Message of <rpm-cvs>

[CVS] RPM: rpm/ CHANGES rpm/rpmdb/ header.c

From: Jeff Johnson <jbj@rpm5.org>
Date: Thu 02 Aug 2007 - 20:38:20 CEST
Message-Id: <20070802183820.CB72734844E@rpm5.org>
  RPM Package Manager, CVS Repository
  http://rpm5.org/cvs/
  ____________________________________________________________________________

  Server: rpm5.org                         Name:   Jeff Johnson
  Root:   /v/rpm/cvs                       Email:  jbj@rpm5.org
  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;
   }
   
  +/*@unchecked@*/
  +extern headerTagIndices rpmTags;
  +
  +/**
  + * Return tag name from value.
  + * @param tag		tag value
  + * @return		tag name, "(unknown)" on not found
  + */
  +/*@-redecl@*/
  +/*@unused@*/ static inline /*@observer@*/
  +const char * tagName(int tag)
  +	/*@*/
  +{
  +/*@-type@*/
  +    return ((*rpmTags->tagName)(tag));
  +/*@=type@*/
  +}
  +
  +/*@=redecl@*/
   /** \ingroup header
    * Retrieve extension or tag value.
    *
  @@ -1844,7 +1863,25 @@
   	/*@modifies *type, *p, *c @*/
   	/*@requires 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
  @@ .
Received on Thu Aug 2 20:38:20 2007
Driven by Jeff Johnson and the RPM project team.
Hosted by OpenPKG and Ralf S. Engelschall.
Powered by FreeBSD and OpenPKG.