RPM Community Forums

Mailing List Message of <rpm-cvs>

[CVS] RPM: rpm/ CHANGES rpm/lib/ rpmfc.c

From: Jeff Johnson <jbj@rpm5.org>
Date: Mon 22 Oct 2007 - 03:06:06 CEST
Message-Id: <20071022010606.21F1C34846A@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:   22-Oct-2007 03:06:06
  Branch: HEAD                             Handle: 2007102202060500

  Modified files:
    rpm                     CHANGES
    rpm/lib                 rpmfc.c

  Log:
    - jbj: rpmfc.c: wrap headerAddEntry.

  Summary:
    Revision    Changes     Path
    1.1751      +1  -0      rpm/CHANGES
    1.29        +107 -66    rpm/lib/rpmfc.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: rpm/CHANGES
  ============================================================================
  $ cvs diff -u -r1.1750 -r1.1751 CHANGES
  --- rpm/CHANGES	22 Oct 2007 00:27:32 -0000	1.1750
  +++ rpm/CHANGES	22 Oct 2007 01:06:05 -0000	1.1751
  @@ -1,4 +1,5 @@
   4.5 -> 5.0:
  +    - jbj: rpmfc.c: wrap headerAddEntry.
       - jbj: psm.c: wrap headerAddEntry.
       - jbj: hmm, still segfaults, more to do.
       - jbj: change headerGetEntry prototype, use headerGetExtension instead.
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/lib/rpmfc.c
  ============================================================================
  $ cvs diff -u -r1.28 -r1.29 rpmfc.c
  --- rpm/lib/rpmfc.c	19 Oct 2007 00:36:44 -0000	1.28
  +++ rpm/lib/rpmfc.c	22 Oct 2007 01:06:05 -0000	1.29
  @@ -1390,6 +1390,8 @@
   
   int rpmfcGenerateDepends(void * specp, void * pkgp)
   {
  +    HAE_t hae = (HAE_t)headerAddEntry;
  +    HE_t he = memset(alloca(sizeof(*he)), 0, sizeof(*he));
       const Spec spec = specp;
       Package pkg = pkgp;
       rpmfi fi = pkg->cpioList;
  @@ -1399,13 +1401,12 @@
       ARGV_t av;
       int_16 * fmode;
       int ac = rpmfiFC(fi);
  -    const void ** p;
       char buf[BUFSIZ];
       const char * N;
       const char * EVR;
       int genConfigDeps, internaldeps;
  -    int c;
       int rc = 0;
  +    int i;
       int xx;
   
       /* Skip packages with no files. */
  @@ -1430,21 +1431,22 @@
   	xx = rpmfcGenerateScriptletDeps(spec, pkg);
   
       /* Extract absolute file paths in argv format. */
  +    /* XXX TODO: should use argvFoo ... */
       av = xcalloc(ac+1, sizeof(*av));
       fmode = xcalloc(ac+1, sizeof(*fmode));
   
       genConfigDeps = 0;
       fi = rpmfiInit(fi, 0);
       if (fi != NULL)
  -    while ((c = rpmfiNext(fi)) >= 0) {
  +    while ((i = rpmfiNext(fi)) >= 0) {
   	rpmfileAttrs fileAttrs;
   
   	/* Does package have any %config files? */
   	fileAttrs = rpmfiFFlags(fi);
   	genConfigDeps |= (fileAttrs & RPMFILE_CONFIG);
   
  -	av[c] = xstrdup(rpmfiFN(fi));
  -	fmode[c] = rpmfiFMode(fi);
  +	av[i] = xstrdup(rpmfiFN(fi));
  +	fmode[i] = rpmfiFMode(fi);
       }
       av[ac] = NULL;
   
  @@ -1514,92 +1516,131 @@
       xx = rpmfcApply(fc);
   
       /* Add per-file colors(#files) */
  -    p = (const void **) argiData(fc->fcolor);
  -    c = argiCount(fc->fcolor);
  -assert(ac == c);
  -    if (p != NULL && c > 0) {
  -	int_32 * fcolors = (int_32 *)p;
  +    he->tag = RPMTAG_FILECOLORS;
  +    he->t = RPM_INT32_TYPE;
  +    he->p.i32p = argiData(fc->fcolor);
  +    he->c = argiCount(fc->fcolor);
  +assert(ac == he->c);
  +    if (he->p.ptr != NULL && he->c > 0) {
  +	int_32 * fcolors = he->p.i32p;
   	int i;
   
   	/* XXX Make sure only primary (i.e. Elf32/Elf64) colors are added. */
  -	for (i = 0; i < c; i++)
  +	for (i = 0; i < he->c; i++)
   	    fcolors[i] &= 0x0f;
  -	xx = headerAddEntry(pkg->header, RPMTAG_FILECOLORS, RPM_INT32_TYPE,
  -			p, c);
  +
  +	xx = hae(pkg->header, he->tag, he->t, he->p.ptr, he->c);
  +assert(xx);
       }
   
       /* Add classes(#classes) */
  -    p = (const void **) argvData(fc->cdict);
  -    c = argvCount(fc->cdict);
  -    if (p != NULL && c > 0)
  -	xx = headerAddEntry(pkg->header, RPMTAG_CLASSDICT, RPM_STRING_ARRAY_TYPE,
  -			p, c);
  +    he->tag = RPMTAG_CLASSDICT;
  +    he->t = RPM_STRING_ARRAY_TYPE;
  +    he->p.argv = argvData(fc->cdict);
  +    he->c = argvCount(fc->cdict);
  +    if (he->p.ptr != NULL && he->c > 0) {
  +	xx = hae(pkg->header, he->tag, he->t, he->p.ptr, he->c);
  +assert(xx);
  +    }
   
       /* Add per-file classes(#files) */
  -    p = (const void **) argiData(fc->fcdictx);
  -    c = argiCount(fc->fcdictx);
  -assert(ac == c);
  -    if (p != NULL && c > 0)
  -	xx = headerAddEntry(pkg->header, RPMTAG_FILECLASS, RPM_INT32_TYPE,
  -			p, c);
  +    he->tag = RPMTAG_FILECLASS;
  +    he->t = RPM_INT32_TYPE;
  +    he->p.i32p = argiData(fc->fcdictx);
  +    he->c = argiCount(fc->fcdictx);
  +assert(ac == he->c);
  +    if (he->p.ptr != NULL && he->c > 0) {
  +	xx = hae(pkg->header, he->tag, he->t, he->p.ptr, he->c);
  +assert(xx);
  +    }
   
       /* Add Provides: */
  -    if (fc->provides != NULL && (c = rpmdsCount(fc->provides)) > 0 && !fc->skipProv) {
  -	p = (const void **) fc->provides->N;
  -	xx = headerAddEntry(pkg->header, RPMTAG_PROVIDENAME, RPM_STRING_ARRAY_TYPE,
  -			p, c);
  +    if (fc->provides != NULL && (he->c = rpmdsCount(fc->provides)) > 0
  +     && !fc->skipProv)
  +    {
  +	he->tag = RPMTAG_PROVIDENAME;
  +	he->t = RPM_STRING_ARRAY_TYPE;
  +	he->p.argv = fc->provides->N;
  +	xx = hae(pkg->header, he->tag, he->t, he->p.ptr, he->c);
  +assert(xx);
  +
   	/* XXX rpm prior to 3.0.2 did not always supply EVR and Flags. */
   /*@-nullpass@*/
  -	p = (const void **) fc->provides->EVR;
  -assert(p != NULL);
  -	xx = headerAddEntry(pkg->header, RPMTAG_PROVIDEVERSION, RPM_STRING_ARRAY_TYPE,
  -			p, c);
  -	p = (const void **) fc->provides->Flags;
  -assert(p != NULL);
  -	xx = headerAddEntry(pkg->header, RPMTAG_PROVIDEFLAGS, RPM_INT32_TYPE,
  -			p, c);
  +	he->tag = RPMTAG_PROVIDEVERSION;
  +	he->t = RPM_STRING_ARRAY_TYPE;
  +	he->p.argv = fc->provides->EVR;
  +assert(he->p.ptr != NULL);
  +	xx = hae(pkg->header, he->tag, he->t, he->p.ptr, he->c);
  +assert(xx);
  +
  +	he->tag = RPMTAG_PROVIDEFLAGS;
  +	he->t = RPM_INT32_TYPE;
  +	he->p.i32p = fc->provides->Flags;
  +assert(he->p.ptr != NULL);
  +	xx = hae(pkg->header, he->tag, he->t, he->p.ptr, he->c);
  +assert(xx);
   /*@=nullpass@*/
       }
   
       /* Add Requires: */
  -    if (fc->requires != NULL && (c = rpmdsCount(fc->requires)) > 0 && !fc->skipReq) {
  -	p = (const void **) fc->requires->N;
  -	xx = headerAddEntry(pkg->header, RPMTAG_REQUIRENAME, RPM_STRING_ARRAY_TYPE,
  -			p, c);
  +    if (fc->requires != NULL && (he->c = rpmdsCount(fc->requires)) > 0
  +     && !fc->skipReq)
  +    {
  +	he->tag = RPMTAG_REQUIRENAME;
  +	he->t = RPM_STRING_ARRAY_TYPE;
  +	he->p.argv = fc->requires->N;
  +assert(he->p.ptr != NULL);
  +	xx = hae(pkg->header, he->tag, he->t, he->p.ptr, he->c);
  +assert(xx);
  +
   	/* XXX rpm prior to 3.0.2 did not always supply EVR and Flags. */
   /*@-nullpass@*/
  -	p = (const void **) fc->requires->EVR;
  -assert(p != NULL);
  -	xx = headerAddEntry(pkg->header, RPMTAG_REQUIREVERSION, RPM_STRING_ARRAY_TYPE,
  -			p, c);
  -	p = (const void **) fc->requires->Flags;
  -assert(p != NULL);
  -	xx = headerAddEntry(pkg->header, RPMTAG_REQUIREFLAGS, RPM_INT32_TYPE,
  -			p, c);
  +	he->tag = RPMTAG_REQUIREVERSION;
  +	he->t = RPM_STRING_ARRAY_TYPE;
  +	he->p.argv = fc->requires->EVR;
  +assert(he->p.ptr != NULL);
  +	xx = hae(pkg->header, he->tag, he->t, he->p.ptr, he->c);
  +assert(xx);
  +
  +	he->tag = RPMTAG_REQUIREFLAGS;
  +	he->t = RPM_INT32_TYPE;
  +	he->p.i32p = fc->requires->Flags;
  +assert(he->p.ptr != NULL);
  +	xx = hae(pkg->header, he->tag, he->t, he->p.ptr, he->c);
  +assert(xx);
   /*@=nullpass@*/
       }
   
       /* Add dependency dictionary(#dependencies) */
  -    p = (const void **) argiData(fc->ddictx);
  -    c = argiCount(fc->ddictx);
  -    if (p != NULL)
  -	xx = headerAddEntry(pkg->header, RPMTAG_DEPENDSDICT, RPM_INT32_TYPE,
  -			p, c);
  +    he->tag = RPMTAG_DEPENDSDICT;
  +    he->t = RPM_INT32_TYPE;
  +    he->p.i32p = argiData(fc->ddictx);
  +    he->c = argiCount(fc->ddictx);
  +    if (he->p.ptr != NULL) {
  +	xx = hae(pkg->header, he->tag, he->t, he->p.ptr, he->c);
  +assert(xx);
  +    }
   
       /* Add per-file dependency (start,number) pairs (#files) */
  -    p = (const void **) argiData(fc->fddictx);
  -    c = argiCount(fc->fddictx);
  -assert(ac == c);
  -    if (p != NULL)
  -	xx = headerAddEntry(pkg->header, RPMTAG_FILEDEPENDSX, RPM_INT32_TYPE,
  -			p, c);
  -
  -    p = (const void **) argiData(fc->fddictn);
  -    c = argiCount(fc->fddictn);
  -assert(ac == c);
  -    if (p != NULL)
  -	xx = headerAddEntry(pkg->header, RPMTAG_FILEDEPENDSN, RPM_INT32_TYPE,
  -			p, c);
  +    he->tag = RPMTAG_FILEDEPENDSX;
  +    he->t = RPM_INT32_TYPE;
  +    he->p.i32p = argiData(fc->fddictx);
  +    he->c = argiCount(fc->fddictx);
  +assert(ac == he->c);
  +    if (he->p.ptr != NULL) {
  +	xx = hae(pkg->header, he->tag, he->t, he->p.ptr, he->c);
  +assert(xx);
  +    }
  +
  +    he->tag = RPMTAG_FILEDEPENDSN;
  +    he->t = RPM_INT32_TYPE;
  +    he->p.i32p = argiData(fc->fddictn);
  +    he->c = argiCount(fc->fddictn);
  +assert(ac == he->c);
  +    if (he->p.ptr != NULL) {
  +	xx = hae(pkg->header, he->tag, he->t, he->p.ptr, he->c);
  +assert(xx);
  +    }
   
       printDeps(pkg->header);
   
  @@ .
Received on Mon Oct 22 03:06:06 2007
Driven by Jeff Johnson and the RPM project team.
Hosted by OpenPKG and Ralf S. Engelschall.
Powered by FreeBSD and OpenPKG.