RPM Community Forums

Mailing List Message of <rpm-cvs>

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

From: Jeff Johnson <jbj@rpm5.org>
Date: Fri 12 Oct 2007 - 22:23:04 CEST
Message-Id: <20071012202304.63AD2348451@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:   12-Oct-2007 22:23:04
  Branch: HEAD                             Handle: 2007101221230301

  Modified files:
    rpm                     CHANGES
    rpm/lib                 rpmte.c
    rpm/rpmdb               header.h

  Log:
    - jbj: addTE: use headerGetExtension.
    - jbj: add HE_s typedef to get rid of alloca baggage.

  Summary:
    Revision    Changes     Path
    1.1678      +2  -0      rpm/CHANGES
    2.54        +40 -62     rpm/lib/rpmte.c
    1.30        +4  -2      rpm/rpmdb/header.h
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: rpm/CHANGES
  ============================================================================
  $ cvs diff -u -r1.1677 -r1.1678 CHANGES
  --- rpm/CHANGES	12 Oct 2007 19:50:36 -0000	1.1677
  +++ rpm/CHANGES	12 Oct 2007 20:23:03 -0000	1.1678
  @@ -1,4 +1,6 @@
   4.5 -> 5.0:
  +    - jbj: addTE: use headerGetExtension.
  +    - jbj: add HE_s typedef to get rid of alloca baggage.
       - bero: Make rpm2cpio work for packages with payloads other than gzip
       - jbj: change to hRET_t for existing headerGetExtension uses.
       - bero: Add %optional flag on files (packages a file if it is there,
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/lib/rpmte.c
  ============================================================================
  $ cvs diff -u -r2.53 -r2.54 rpmte.c
  --- rpm/lib/rpmte.c	12 Oct 2007 18:55:57 -0000	2.53
  +++ rpm/lib/rpmte.c	12 Oct 2007 20:23:03 -0000	2.54
  @@ -95,19 +95,18 @@
   		rpmGlobalMacroContext, fileSystem, internalState @*/
   {
       int scareMem = 0;
  -    HGE_t hge = (HGE_t)headerGetEntryMinMemory;
  -    rpmte savep;
  -    int_32 * ep, pkgidcnt;
  -    const char * hdrid, * arch, * os;
  -    const unsigned char * pkgid;
  -    char * t;
  -    size_t nb;
  -    hRET_t NVRA = { .ptr = NULL };
  +    HGE_t hge = (HGE_t)headerGetExtension;
  +    int_32 he_t = 0;
  +    hRET_t he_p = { .ptr = NULL };
  +    int_32 he_c = 0;
  +    HE_s he_s = { .tag = 0, .t = &he_t, .p = &he_p, .c = &he_c, .freeData = 0 };
  +    HE_t he = &he_s;
       int xx;
   
  -    xx = headerGetExtension(h, RPMTAG_NVRA, NULL, &NVRA, NULL);
  -assert(NVRA.str != NULL);
  -    p->NEVR = NVRA.str;
  +    he->tag = RPMTAG_NVRA;
  +    xx = hge(h, he->tag, he->t, he->p, he->c);
  +assert(he_p.str != NULL);
  +    p->NEVR = he_p.str;
       p->name = xstrdup(p->NEVR);
       if ((p->release = strrchr(p->name, '-')) != NULL)
   	*p->release++ = '\0';
  @@ -116,69 +115,47 @@
   
       p->db_instance = 0;
   
  -    hdrid = NULL;
  -    xx = hge(h, RPMTAG_HDRID, NULL, &hdrid, NULL);
  -    if (hdrid != NULL)
  -	p->hdrid = xstrdup(hdrid);
  -    else
  -	p->hdrid = NULL;
  -
  -    pkgid = NULL;
  -    xx = hge(h, RPMTAG_PKGID, NULL, &pkgid, &pkgidcnt);
  -    if (pkgid != NULL) {
  +    he->tag = RPMTAG_HDRID;
  +    xx = hge(h, he->tag, he->t, he->p, he->c);
  +    p->hdrid = he_p.str;
  +
  +    he->tag = RPMTAG_PKGID;
  +    xx = hge(h, he->tag, he->t, he->p, he->c);
  +    if (he_p.ui8p != NULL) {
   	static const char hex[] = "0123456789abcdef";
  +	char * t;
   	int i;
   
  -	p->pkgid = t = xmalloc((2*pkgidcnt) + 1);
  -	for (i = 0 ; i < pkgidcnt; i++) {
  -	    *t++ = hex[ (unsigned)((pkgid[i] >> 4) & 0x0f) ];
  -	    *t++ = hex[ (unsigned)((pkgid[i]   ) & 0x0f) ];
  +	p->pkgid = t = xmalloc((2*he_c) + 1);
  +	for (i = 0 ; i < he_c; i++) {
  +	    *t++ = hex[ (unsigned)((he_p.ui8p[i] >> 4) & 0x0f) ];
  +	    *t++ = hex[ (unsigned)((he_p.ui8p[i]     ) & 0x0f) ];
   	}
   	*t = '\0';
  -#ifdef NOTYET	/* XXX MinMemory. */
  -	pkgid = headerFreeData(pkgid, RPM_BIN_TYPE);
  -#endif
  +	he_p.ptr = _free(he_p.ptr);
       } else
   	p->pkgid = NULL;
   
  -    arch = NULL;
  -    xx = hge(h, RPMTAG_ARCH, NULL, &arch, NULL);
  -    p->arch = (arch != NULL ? xstrdup(arch) : NULL);
  -    os = NULL;
  -    xx = hge(h, RPMTAG_OS, NULL, &os, NULL);
  -    p->os = (os != NULL ? xstrdup(os) : NULL);
  +    he->tag = RPMTAG_ARCH;
  +    xx = hge(h, he->tag, he->t, he->p, he->c);
  +    p->arch = he_p.str;
  +
  +    he->tag = RPMTAG_OS;
  +    xx = hge(h, he->tag, he->t, he->p, he->c);
  +    p->os = he_p.str;
   
       p->isSource =
   	(headerIsEntry(h, RPMTAG_SOURCERPM) == 0 &&
   	 headerIsEntry(h, RPMTAG_ARCH) != 0);
   
  -    nb = strlen(p->NEVR) + 1;
  -#ifdef	DYING	/* p->NEVR includes arch now. */
  -    if (p->arch == NULL)
  -	nb += sizeof("pubkey");
  -    else if (p->isSource)
  -	nb += sizeof("src");
  -    else
  -	nb += strlen(p->arch) + 1;
  -#endif
  -    t = xmalloc(nb);
  -    p->NEVRA = t;
  -    *t = '\0';
  -    t = stpcpy(t, p->NEVR);
  -#ifdef	DYING	/* p->NEVR includes arch now. */
  -    if (p->arch == NULL)
  -	t = stpcpy( t, ".pubkey");
  -    else if (p->isSource)
  -	t = stpcpy( t, ".src");
  -    else
  -	t = stpcpy( stpcpy( t, "."), p->arch);
  -#endif
  +    p->NEVRA = xstrdup(p->NEVR);
   
  -    ep = NULL;
  -    xx = hge(h, RPMTAG_EPOCH, NULL, &ep, NULL);
  -    if (ep) {
  +    he->tag = RPMTAG_EPOCH;
  +    xx = hge(h, he->tag, he->t, he->p, he->c);
  +    if (he_p.i32p != NULL) {
   	p->epoch = xmalloc(20);
  -	sprintf(p->epoch, "%d", *ep);
  +	sprintf(p->epoch, "%d", *he_p.i32p);
  +	he_p.ptr = _free(he_p.ptr);
       } else
   	p->epoch = NULL;
   
  @@ -212,9 +189,10 @@
   
       p->PRCO = rpmdsNewPRCO(h);
   
  -    savep = rpmtsSetRelocateElement(ts, p);
  -    p->fi = rpmfiNew(ts, h, RPMTAG_BASENAMES, scareMem);
  -    (void) rpmtsSetRelocateElement(ts, savep);
  +    {	rpmte savep = rpmtsSetRelocateElement(ts, p);
  +	p->fi = rpmfiNew(ts, h, RPMTAG_BASENAMES, scareMem);
  +	(void) rpmtsSetRelocateElement(ts, savep);
  +    }
   
       rpmteColorDS(p, RPMTAG_PROVIDENAME);
       rpmteColorDS(p, RPMTAG_REQUIRENAME);
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmdb/header.h
  ============================================================================
  $ cvs diff -u -r1.29 -r1.30 header.h
  --- rpm/rpmdb/header.h	7 Oct 2007 19:25:22 -0000	1.29
  +++ rpm/rpmdb/header.h	12 Oct 2007 20:23:04 -0000	1.30
  @@ -316,6 +316,7 @@
       uint_64 * ui64p;
       uint_32 * ui32p;
       uint_16 * ui16p;
  +    uint_8 * ui8p;
       int_64 * i64p;
       int_32 * i32p;
       int_16 * i16p;
  @@ -327,9 +328,8 @@
   /**
    */
   /*@-typeuse -fielduse@*/
  -typedef struct HE_s * HE_t;
   #if !defined(SWIG)
  -struct HE_s {
  +struct _HE_s {
       int_32 tag;
   /*@null@*/
       hTYP_t t;
  @@ -339,7 +339,9 @@
       hCNT_t c;
       int freeData;
   };
  +typedef struct _HE_s HE_s;
   #endif
  +typedef HE_s * HE_t;
   /*@=typeuse =fielduse@*/
   
   /** \ingroup header
  @@ .
Received on Fri Oct 12 22:23:04 2007
Driven by Jeff Johnson and the RPM project team.
Hosted by OpenPKG and Ralf S. Engelschall.
Powered by FreeBSD and OpenPKG.