aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPer Øyvind Karlsen <peroyvind@mandriva.org>2011-03-06 04:59:18 +0000
committerPer Øyvind Karlsen <peroyvind@mandriva.org>2011-03-06 04:59:18 +0000
commit1fd571fe46baa6bbd3b371b3e00ae53d8bdfb9ca (patch)
treeb5ed791c200e483db4053fc75e9b296f465a15ec
parenta772596b41acc229f2ec101d880b2614147ed0be (diff)
downloadperl-URPM-1fd571fe46baa6bbd3b371b3e00ae53d8bdfb9ca.tar
perl-URPM-1fd571fe46baa6bbd3b371b3e00ae53d8bdfb9ca.tar.gz
perl-URPM-1fd571fe46baa6bbd3b371b3e00ae53d8bdfb9ca.tar.bz2
perl-URPM-1fd571fe46baa6bbd3b371b3e00ae53d8bdfb9ca.tar.xz
perl-URPM-1fd571fe46baa6bbd3b371b3e00ae53d8bdfb9ca.zip
always strip distepoch right away when loading package headers
-rw-r--r--URPM.xs28
1 files changed, 24 insertions, 4 deletions
diff --git a/URPM.xs b/URPM.xs
index e1b43e1..0c962ed 100644
--- a/URPM.xs
+++ b/URPM.xs
@@ -1310,6 +1310,11 @@ update_header(char *filename, URPM__Package pkg, __attribute__((unused)) int kee
ts = rpmtsCreate();
rpmtsSetVSFlags(ts, _RPMVSF_NOSIGNATURES | vsflags);
if (fd != NULL && rpmReadPackageFile(ts, fd, filename, &header) == 0 && header) {
+ strip_distepoch(header, RPMTAG_PROVIDEVERSION);
+ strip_distepoch(header, RPMTAG_REQUIREVERSION);
+ strip_distepoch(header, RPMTAG_OBSOLETEVERSION);
+ strip_distepoch(header, RPMTAG_CONFLICTVERSION);
+
char *basename;
#ifndef RPM_ORG
struct stat sb;
@@ -1345,6 +1350,14 @@ update_header(char *filename, URPM__Package pkg, __attribute__((unused)) int kee
if (fd != NULL) {
if (pkg->h && !(pkg->flag & FLAG_NO_HEADER_FREE)) pkg->h = headerFree(pkg->h);
pkg->h = headerRead(fd, HEADER_MAGIC_YES);
+
+ if (pkg->h) {
+ strip_distepoch(pkg->h, RPMTAG_PROVIDEVERSION);
+ strip_distepoch(pkg->h, RPMTAG_REQUIREVERSION);
+ strip_distepoch(pkg->h, RPMTAG_OBSOLETEVERSION);
+ strip_distepoch(pkg->h, RPMTAG_CONFLICTVERSION);
+ }
+
pkg->flag &= ~FLAG_NO_HEADER_FREE;
Fclose(fd);
return 1;
@@ -3148,10 +3161,6 @@ Trans_add(trans, pkg, ...)
}
}
}
- strip_distepoch(pkg->h, RPMTAG_PROVIDEVERSION);
- strip_distepoch(pkg->h, RPMTAG_REQUIREVERSION);
- strip_distepoch(pkg->h, RPMTAG_OBSOLETEVERSION);
- strip_distepoch(pkg->h, RPMTAG_CONFLICTVERSION);
RETVAL = rpmtsAddInstallElement(trans->ts, pkg->h, (fnpyKey)(1+(long)(pkg->flag & FLAG_ID)), update, relocations) == 0;
/* free allocated memory, check rpm is copying it just above, at least in 4.0.4 */
@@ -3628,6 +3637,11 @@ Urpm_parse_hdlist__XS(urpm, filename, ...)
struct s_Package pkg, *_pkg;
SV *sv_pkg;
+ strip_distepoch(header, RPMTAG_PROVIDEVERSION);
+ strip_distepoch(header, RPMTAG_REQUIREVERSION);
+ strip_distepoch(header, RPMTAG_OBSOLETEVERSION);
+ strip_distepoch(header, RPMTAG_CONFLICTVERSION);
+
memset(&pkg, 0, sizeof(struct s_Package));
pkg.flag = 1 + av_len(depslist);
pkg.h = header;
@@ -3988,6 +4002,12 @@ Urpm_stream2header(fp)
pkg->h = headerRead(fd, HEADER_MAGIC_YES);
if (pkg->h) {
SV *sv_pkg;
+
+ strip_distepoch(pkg->h, RPMTAG_PROVIDEVERSION);
+ strip_distepoch(pkg->h, RPMTAG_REQUIREVERSION);
+ strip_distepoch(pkg->h, RPMTAG_OBSOLETEVERSION);
+ strip_distepoch(pkg->h, RPMTAG_CONFLICTVERSION);
+
EXTEND(SP, 1);
sv_pkg = sv_newmortal();
sv_setref_pv(sv_pkg, "URPM::Package", (void*)pkg);