=== modified file 'smart/backends/rpm/crpmver.c' --- smart/backends/rpm/crpmver.c 2011-04-27 21:50:12 +0000 +++ smart/backends/rpm/crpmver.c 2011-05-04 12:35:56 +0000 @@ -33,10 +33,20 @@ #include #endif +#ifdef USE_RPMEVR +#include +#include +#define _RPMEVR_INTERNAL +#include +#endif + /* Ripped from rpm. */ static int vercmppart(const char *a, const char *b) { +#ifdef USE_RPMEVR + return rpmvercmp(a, b); +#else char oldch1, oldch2; char *str1, *str2; char *one, *two; @@ -99,12 +109,38 @@ if ((!*one) && (!*two)) return 0; if (!*one) return -1; else return 1; +#endif } static int vercmpparts(const char *e1, const char *v1, const char *r1, const char *d1, const char *e2, const char *v2, const char *r2, const char *d2) { +#ifdef USE_RPMEVR + EVR_t a, b; + int rc; + + a = rpmEVRnew(RPMSENSE_EQUAL, 1); + b = rpmEVRnew(RPMSENSE_EQUAL, 1); +#ifdef _RPMEVR_INTERNAL + a->F[RPMEVR_E] = e1; + b->F[RPMEVR_E] = e2; + a->F[RPMEVR_V] = v1; + b->F[RPMEVR_V] = v2; + a->F[RPMEVR_R] = r1; + b->F[RPMEVR_R] = r2; +#ifdef RPMEVR_D + a->F[RPMEVR_D] = d1; + b->F[RPMEVR_D] = d2; +#endif +#else +#error EVR_t is internal +#endif /* _RPMEVR_INTERNAL */ + rc = rpmEVRcompare(a, b); + a = rpmEVRfree(a); + b = rpmEVRfree(b); + return rc; +#else int e1i = 0; int e2i = 0; int rc; @@ -124,8 +160,10 @@ return rc; /* ignore distepoch */ return 0; +#endif } +#ifndef USE_RPMEVR static void splitversion(char *buf, char **e, char **v, char **r, char **d) { @@ -159,10 +197,24 @@ *d = NULL; } } +#endif static int vercmp(const char *s1, const char *s2) { +#ifdef USE_RPMEVR + EVR_t a, b; + int rc; + + a = rpmEVRnew(RPMSENSE_EQUAL, 0); + b = rpmEVRnew(RPMSENSE_EQUAL, 0); + rpmEVRparse(s1, a); + rpmEVRparse(s2, b); + rc = rpmEVRcompare(a, b); + a = rpmEVRfree(a); + b = rpmEVRfree(b); + return rc; +#else char *e1, *v1, *r1, *d1, *e2, *v2, *r2, *d2; char b1[64]; char b2[64]; @@ -173,6 +225,7 @@ splitversion(b1, &e1, &v1, &r1, &d1); splitversion(b2, &e2, &v2, &r2, &d2); return vercmpparts(e1, v1, r1, d1, e2, v2, r2, d2); +#endif } static PyObject *