aboutsummaryrefslogtreecommitdiffstats
path: root/meta/recipes-devtools/rpm/rpm/rpm-payload-use-hashed-inode.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta/recipes-devtools/rpm/rpm/rpm-payload-use-hashed-inode.patch')
-rw-r--r--meta/recipes-devtools/rpm/rpm/rpm-payload-use-hashed-inode.patch126
1 files changed, 0 insertions, 126 deletions
diff --git a/meta/recipes-devtools/rpm/rpm/rpm-payload-use-hashed-inode.patch b/meta/recipes-devtools/rpm/rpm/rpm-payload-use-hashed-inode.patch
deleted file mode 100644
index af643b1c62..0000000000
--- a/meta/recipes-devtools/rpm/rpm/rpm-payload-use-hashed-inode.patch
+++ /dev/null
@@ -1,126 +0,0 @@
-If we run builds on a filesystem with 64 bit inodes like XFS, we need to
-map the inode numbers to something 32 bit since the cpio header only allows
-for 32 bit inode values. If we don't do this:
-
-#define SET_NUM_FIELD(phys, val, space) \
- sprintf(space, "%8.8lx", (unsigned long) (val)); \
- memcpy(phys, space, 8)
-
-from cpio.c will print larger that 8 character values and then truncate the
-LSBs. This generates cpio files where hardlinked files may have the same
-inode number. The resulting rpms are then corrupted.
-
-There is a separate patch for the crash the identical inode numbers causes
-when extracting the rpm.
-
-Patch taken from http://git.pld-linux.org/?p=packages/rpm.git;a=commitdiff;h=10526c23aac60b7b636e4c93862887dbef8e8f15
-
-RP 2014/6/10
-
-Upstream-Status: Submitted [RPM5 maintainer]
-
-Index: rpm-5.4.14/build/files.c
-===================================================================
---- rpm-5.4.14.orig/build/files.c
-+++ rpm-5.4.14/build/files.c
-@@ -1328,6 +1328,26 @@ static rpmuint32_t getDigestAlgo(Header
- return dalgo;
- }
-
-+static int isHardLink(FileListRec flp, FileListRec tlp)
-+{
-+ return ((S_ISREG(flp->fl_mode) && S_ISREG(tlp->fl_mode)) &&
-+ ((flp->fl_nlink > 1) && (flp->fl_nlink == tlp->fl_nlink)) &&
-+ (flp->fl_ino == tlp->fl_ino) &&
-+ (flp->fl_dev == tlp->fl_dev));
-+}
-+
-+static int seenHardLink(FileList fl, FileListRec flp, ino_t *fileid)
-+{
-+ FileListRec ilp;
-+ for (ilp = fl->fileList; ilp < flp; ilp++) {
-+ if (isHardLink(flp, ilp)) {
-+ *fileid = ilp - fl->fileList;
-+ return 1;
-+ }
-+ }
-+ return 0;
-+}
-+
- /**
- * Add file entries to header.
- * @todo Should directories have %doc/%config attributes? (#14531)
-@@ -1374,6 +1394,7 @@ memset(buf, 0, sizeof(buf)); /* XXX valg
-
- for (i = 0, flp = fl->fileList; i < fl->fileListRecsUsed; i++, flp++) {
- const char *s;
-+ ino_t fileid = flp - fl->fileList;
-
- /* Merge duplicate entries. */
- while (i < (fl->fileListRecsUsed - 1) &&
-@@ -1436,6 +1457,13 @@ memset(buf, 0, sizeof(buf)); /* XXX valg
- /* Leave room for both dirname and basename NUL's */
- dpathlen += (strlen(flp->diskURL) + 2);
-
-+ /* Excludes and dupes have been filtered out by now. */
-+ if (S_ISREG(flp->fl_mode)) {
-+ if (flp->fl_nlink == 1 || !seenHardLink(fl, flp, &fileid)) {
-+ fl->totalFileSize += flp->fl_size;
-+ }
-+ }
-+
- /*
- * Make the header, the OLDFILENAMES will get converted to a
- * compressed file list write before we write the actual package to
-@@ -1518,7 +1546,11 @@ memset(buf, 0, sizeof(buf)); /* XXX valg
-
- /* XXX Hash instead of 64b->32b truncate to prevent aliasing. */
- { ino_t _ino = flp->fl_ino;
-+ /* don't use hash here, as hash collisions which happen on large packages
-+ cause bus errors in rpmbuild
- ui32 = hashFunctionString(0, &_ino, sizeof(_ino));
-+ */
-+ ui32 = fileid + 1;
- }
- he->tag = RPMTAG_FILEINODES;
- he->t = RPM_UINT32_TYPE;
-@@ -1751,39 +1783,6 @@ if (_rpmbuildFlags & 4) {
- IOSM_MAP_TYPE | IOSM_MAP_MODE | IOSM_MAP_UID | IOSM_MAP_GID;
- if (isSrc)
- fi->fmapflags[i] |= IOSM_FOLLOW_SYMLINKS;
--
-- if (S_ISREG(flp->fl_mode)) {
-- int bingo = 1;
-- /* Hard links need be tallied only once. */
-- if (flp->fl_nlink > 1) {
-- FileListRec jlp = flp + 1;
-- int j = i + 1;
-- for (; (unsigned)j < fi->fc; j++, jlp++) {
-- /* follow outer loop logic */
-- while (((jlp - fl->fileList) < (fl->fileListRecsUsed - 1)) &&
-- !strcmp(jlp->fileURL, jlp[1].fileURL))
-- jlp++;
-- if (jlp->flags & RPMFILE_EXCLUDE) {
-- j--;
-- /*@innercontinue@*/ continue;
-- }
-- if (jlp->flags & RPMFILE_GHOST)
-- /*@innercontinue@*/ continue;
-- if (!S_ISREG(jlp->fl_mode))
-- /*@innercontinue@*/ continue;
-- if (flp->fl_nlink != jlp->fl_nlink)
-- /*@innercontinue@*/ continue;
-- if (flp->fl_ino != jlp->fl_ino)
-- /*@innercontinue@*/ continue;
-- if (flp->fl_dev != jlp->fl_dev)
-- /*@innercontinue@*/ continue;
-- bingo = 0; /* don't tally hardlink yet. */
-- /*@innerbreak@*/ break;
-- }
-- }
-- if (bingo)
-- fl->totalFileSize += flp->fl_size;
-- }
- }
-
- ui32 = fl->totalFileSize;