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]