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:   03-Apr-2008 21:51:42
  Branch: HEAD                             Handle: 2008040319514100

  Modified files:
    rpm                     CHANGES
    rpm/lib                 rpmfi.c
    rpm/rpmdb               hdrfmt.c

  Log:
    - jbj: permit installing 3.0.x SRPMS.

  Summary:
    Revision    Changes     Path
    1.2287      +1  -0      rpm/CHANGES
    2.123       +14 -1      rpm/lib/rpmfi.c
    1.77        +20 -8      rpm/rpmdb/hdrfmt.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: rpm/CHANGES
  ============================================================================
  $ cvs diff -u -r1.2286 -r1.2287 CHANGES
  --- rpm/CHANGES       3 Apr 2008 18:01:28 -0000       1.2286
  +++ rpm/CHANGES       3 Apr 2008 19:51:41 -0000       1.2287
  @@ -1,4 +1,5 @@
   5.0.0 -> 5.1a1:
  +    - jbj: permit installing 3.0.x SRPMS.
       - jbj: rpmio: fix: add rpmluaFiles to loader map.
       - jbj: fix: avoid assertion failure with entry->info.offset == 0.
       - jbj: merge "support-rpmlua-option" patch from OpenPKG.
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/lib/rpmfi.c
  ============================================================================
  $ cvs diff -u -r2.122 -r2.123 rpmfi.c
  --- rpm/lib/rpmfi.c   19 Mar 2008 21:25:30 -0000      2.122
  +++ rpm/lib/rpmfi.c   3 Apr 2008 19:51:41 -0000       2.123
  @@ -1328,6 +1328,11 @@
   
       he->tag = RPMTAG_BASENAMES;
       xx = headerGet(h, he, 0);
  +    /* XXX 3.0.x SRPM's can be used, relative fn's at RPMTAG_OLDFILENAMES. */
  +    if (xx == 0 && fi->isSource) {
  +     he->tag = RPMTAG_OLDFILENAMES;
  +     xx = headerGet(h, he, 0);
  +    }
       fi->bnl = he->p.argv;
       fi->fc = he->c;
       if (!xx) {
  @@ -1337,7 +1342,15 @@
       }
       _fdupedata(h, RPMTAG_DIRNAMES, fi->dnl);
       fi->dc = he->c;
  -    _fdupedata(h, RPMTAG_DIRINDEXES, fi->dil);
  +    /* XXX 3.0.x SRPM's can be used, relative fn's at RPMTAG_OLDFILENAMES. */
  +    if (fi->dc == 0 && fi->isSource) {
  +     fi->dc = 1;
  +     fi->dnl = xcalloc(3, sizeof(*fi->dnl));
  +     fi->dnl[0] = (const char *)&fi->dnl[2];
  +     fi->dil = xcalloc(fi->fc, sizeof(*fi->dil));
  +    } else {
  +     _fdupedata(h, RPMTAG_DIRINDEXES, fi->dil);
  +    }
       _fdupedata(h, RPMTAG_FILEMODES, fi->fmodes);
       _fdupedata(h, RPMTAG_FILEFLAGS, fi->fflags);
       _fdupedata(h, RPMTAG_FILEVERIFYFLAGS, fi->vflags);
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmdb/hdrfmt.c
  ============================================================================
  $ cvs diff -u -r1.76 -r1.77 hdrfmt.c
  --- rpm/rpmdb/hdrfmt.c        28 Mar 2008 18:49:09 -0000      1.76
  +++ rpm/rpmdb/hdrfmt.c        3 Apr 2008 19:51:41 -0000       1.77
  @@ -1824,12 +1824,15 @@
       HE_t he = memset(alloca(sizeof(*he)), 0, sizeof(*he));
       rpmTag dirNameTag = 0;
       rpmTag dirIndexesTag = 0;
  -    rpmTagData baseNames;
  -    rpmTagData dirNames;
  -    rpmTagData dirIndexes;
  +    rpmTagData baseNames = { .ptr = NULL };
  +    rpmTagData dirNames = { .ptr = NULL };
  +    rpmTagData dirIndexes = { .ptr = NULL };
       rpmTagData fileNames;
       rpmTagCount count;
       size_t size;
  +    int isSource =
  +     (headerIsEntry(h, RPMTAG_SOURCERPM) == 0 &&
  +      headerIsEntry(h, RPMTAG_ARCH) != 0);
       char * t;
       unsigned i;
       int xx;
  @@ -1849,6 +1852,16 @@
   /[EMAIL PROTECTED]@*/
       he->tag = tagN;
       xx = headerGet(h, he, 0);
  +    /* XXX 3.0.x SRPM's can be used, relative fn's at RPMTAG_OLDFILENAMES. */
  +    if (xx == 0 && isSource) {
  +     he->tag = RPMTAG_OLDFILENAMES;
  +     xx = headerGet(h, he, 0);
  +     if (xx) {
  +         dirNames.argv = xcalloc(3, sizeof(*dirNames.argv));
  +         dirNames.argv[0] = (const char *)&dirNames.argv[2];
  +         dirIndexes.ui32p  = xcalloc(he->c, sizeof(*dirIndexes.ui32p));
  +     }
  +    }
       baseNames.argv = he->p.argv;
       count = he->c;
   
  @@ -1859,13 +1872,12 @@
       }
   
       he->tag = dirNameTag;
  -    xx = headerGet(h, he, 0);
  -    dirNames.argv = he->p.argv;
  +    if ((xx = headerGet(h, he, 0)) != 0)
  +     dirNames.argv = he->p.argv;
   
       he->tag = dirIndexesTag;
  -    xx = headerGet(h, he, 0);
  -    dirIndexes.ui32p = he->p.ui32p;
  -    count = he->c;
  +    if ((xx = headerGet(h, he, 0)) != 0)
  +     dirIndexes.ui32p = he->p.ui32p;
   /[EMAIL PROTECTED]@*/
   
       size = sizeof(*fileNames.argv) * count;
  @@ .
______________________________________________________________________
RPM Package Manager                                    http://rpm5.org
CVS Sources Repository                                [email protected]

Reply via email to