aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--URPM.xs23
1 files changed, 12 insertions, 11 deletions
diff --git a/URPM.xs b/URPM.xs
index 46cf931..0b3f9ad 100644
--- a/URPM.xs
+++ b/URPM.xs
@@ -1945,24 +1945,25 @@ Pkg_compare(pkg, evr)
char *evr
PREINIT:
int compare = 0;
- char *_evr;
+ EVR_t lEVR = rpmEVRnew(RPMSENSE_EQUAL, 0),
+ rEVR = rpmEVRnew(RPMSENSE_EQUAL, 0);
CODE:
if (!compare) {
- const char *seps;
- char *tmp;
+ int i;
- _evr = (char*)get_evr(pkg);
/* This will remove fields from _evr (from the right) that evr is missing
* so that ie. if only version is given as an argument, it won't compare
* release etc.
*/
- for(seps = ":-:"; *seps != 0; seps++)
- if((tmp = strrchr(_evr, *seps)) != NULL && strrchr(evr, *seps) == NULL)
- backup_char(tmp);
-
- compare = do_rpmEVRcompare(_evr, evr);
- /* restore provides string modified */
- restore_chars();
+ rpmEVRparse(get_evr(pkg), lEVR);
+ rpmEVRparse(evr, rEVR);
+ for(i = RPMEVR_V; i <= RPMEVR_D; i++)
+ if(!*(rEVR->F[i]))
+ lEVR->F[i] = "";
+
+ compare = rpmEVRcompare(lEVR, rEVR);
+ rpmEVRfree(lEVR);
+ rpmEVRfree(rEVR);
}
RETVAL = compare;
OUTPUT: