You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
78 lines
2.2 KiB
78 lines
2.2 KiB
5 years ago
|
--- rpm-4.11.3/lib/transaction.c.old 2019-01-02 13:14:10.304068576 +0100
|
||
|
+++ rpm-4.11.3/lib/transaction.c 2019-02-28 11:03:32.164403544 +0100
|
||
|
@@ -368,6 +368,11 @@
|
||
|
return rConflicts;
|
||
|
}
|
||
|
|
||
|
+static rpm_loff_t DivideHardlinkSize(int nlink, rpm_loff_t originalSize)
|
||
|
+{
|
||
|
+ return (originalSize / nlink) + 1;
|
||
|
+}
|
||
|
+
|
||
|
/**
|
||
|
* handleInstInstalledFiles.
|
||
|
* @param ts transaction set
|
||
|
@@ -384,6 +389,8 @@
|
||
|
{
|
||
|
rpmfs fs = rpmteGetFileStates(p);
|
||
|
int isCfgFile = ((rpmfiFFlagsIndex(otherFi, ofx) | rpmfiFFlagsIndex(fi, fx)) & RPMFILE_CONFIG);
|
||
|
+ rpm_loff_t otherFileSize;
|
||
|
+ int nlink;
|
||
|
|
||
|
if (XFA_SKIPPING(rpmfsGetAction(fs, fx)))
|
||
|
return;
|
||
|
@@ -445,7 +452,15 @@
|
||
|
action = rpmfiDecideFateIndex(otherFi, ofx, fi, fx, skipMissing);
|
||
|
rpmfsSetAction(fs, fx, action);
|
||
|
}
|
||
|
- rpmfiSetFReplacedSizeIndex(fi, fx, rpmfiFSizeIndex(otherFi, ofx));
|
||
|
+
|
||
|
+ otherFileSize = rpmfiFSizeIndex(otherFi, ofx);
|
||
|
+
|
||
|
+ /* Only an appropriate fraction of the file size of a hardlink */
|
||
|
+ nlink = rpmfiFNlinkIndex(otherFi, ofx);
|
||
|
+ if (nlink > 1)
|
||
|
+ otherFileSize = DivideHardlinkSize(nlink, otherFileSize);
|
||
|
+
|
||
|
+ rpmfiSetFReplacedSizeIndex(fi, fx, otherFileSize);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
@@ -470,6 +485,8 @@
|
||
|
rpmfileAttrs FFlags;
|
||
|
struct rpmffi_s * recs;
|
||
|
int numRecs;
|
||
|
+ rpm_loff_t fileSize;
|
||
|
+ int nlink;
|
||
|
|
||
|
if (XFA_SKIPPING(rpmfsGetAction(fs, i)))
|
||
|
continue;
|
||
|
@@ -633,9 +650,15 @@
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
+ fileSize = rpmfiFSizeIndex(fi, i);
|
||
|
+ nlink = rpmfiFNlinkIndex(fi, i);
|
||
|
+ /* Only an appropriate fraction of the file sizeof a hardlink */
|
||
|
+ if (nlink > 1)
|
||
|
+ fileSize = DivideHardlinkSize(nlink, fileSize);
|
||
|
+
|
||
|
/* Update disk space info for a file. */
|
||
|
rpmtsUpdateDSI(ts, fpEntryDev(fpc, fiFps), fpEntryDir(fpc, fiFps),
|
||
|
- rpmfiFSizeIndex(fi, i), rpmfiFReplacedSizeIndex(fi, i),
|
||
|
+ fileSize, rpmfiFReplacedSizeIndex(fi, i),
|
||
|
fixupSize, rpmfsGetAction(fs, i));
|
||
|
|
||
|
}
|
||
|
--- rpm-4.11.3/lib/rpmfi.h.old 2014-02-05 14:04:02.000000000 +0100
|
||
|
+++ rpm-4.11.3/lib/rpmfi.h 2019-01-07 09:57:40.407787724 +0100
|
||
|
@@ -396,7 +396,7 @@
|
||
|
|
||
|
#define RPMFI_FLAGS_ERASE \
|
||
|
(RPMFI_NOFILECLASS | RPMFI_NOFILELANGS | \
|
||
|
- RPMFI_NOFILEMTIMES | RPMFI_NOFILERDEVS | RPMFI_NOFILEINODES | \
|
||
|
+ RPMFI_NOFILEMTIMES | RPMFI_NOFILERDEVS | \
|
||
|
RPMFI_NOFILEVERIFYFLAGS)
|
||
|
|
||
|
#define RPMFI_FLAGS_INSTALL \
|