Blame SOURCES/0002-github-coreos-rpm-ostree-pr2869.patch

2df828
From 63275852afc4ab0bd0c45ac80f8f865c222759ac Mon Sep 17 00:00:00 2001
2df828
From: Luca BRUNO <luca.bruno@coreos.com>
2df828
Date: Mon, 31 May 2021 10:15:55 +0000
2df828
Subject: [PATCH 1/6] lib: temporarily fork rpmver logic
2df828
2df828
This adds an internal temporary copy of the rpm version comparison
2df828
logic from librpmio (LGPL).
2df828
It allows relaxing the minimum library version to >= 4.14.
2df828
---
2df828
 Makefile-lib.am             |   1 +
2df828
 configure.ac                |   6 +
2df828
 src/lib/rpmostree-package.c |   7 +-
2df828
 src/lib/rpmver-private.c    | 223 ++++++++++++++++++++++++++++++++++++
2df828
 src/lib/rpmver-private.h    | 108 +++++++++++++++++
2df828
 5 files changed, 344 insertions(+), 1 deletion(-)
2df828
 create mode 100644 src/lib/rpmver-private.c
2df828
 create mode 100644 src/lib/rpmver-private.h
2df828
2df828
diff --git a/Makefile-lib.am b/Makefile-lib.am
2df828
index bef049e1e7..f9d67f5c57 100644
2df828
--- a/Makefile-lib.am
2df828
+++ b/Makefile-lib.am
2df828
@@ -28,6 +28,7 @@ librpmostree_1_la_SOURCES = \
2df828
 	src/lib/rpmostree.c \
2df828
 	src/lib/rpmostree-db.c \
2df828
 	src/lib/rpmostree-package.c \
2df828
+	src/lib/rpmver-private.c \
2df828
 	$(NULL)
2df828
 
2df828
 librpmostree_1_la_CFLAGS = $(AM_CFLAGS) -I$(srcdir)/libglnx -I$(srcdir)/src/libpriv -I$(srcdir)/src/lib \
2df828
diff --git a/configure.ac b/configure.ac
2df828
index e763781566..ef5551657f 100644
2df828
--- a/configure.ac
2df828
+++ b/configure.ac
2df828
@@ -53,6 +53,12 @@ dnl RHEL8.1 has old libarchive
2df828
 AS_IF([pkg-config --atleast-version=3.3.3 libarchive],
2df828
   [AC_DEFINE([HAVE_LIBARCHIVE_ZSTD], 1, [Define if we have libarchive with zstd])])
2df828
 
2df828
+# rpmver is available in rpm >= 4.16, el8 is still on 4.14
2df828
+AC_SEARCH_LIBS([rpmverCmp], [rpm],
2df828
+  AC_DEFINE([BUILDOPT_HAVE_RPMVER], 1, [Whether rpmver API is available in librpmio]),
2df828
+  AC_DEFINE([BUILDOPT_HAVE_RPMVER], 0, [Whether rpmver API is available in librpmio])
2df828
+)
2df828
+
2df828
 dnl We don't *actually* use this ourself, but librepo does, and libdnf gets confused
2df828
 dnl if librepo doesn't support it.
2df828
 have_zchunk=no
2df828
diff --git a/src/lib/rpmostree-package.c b/src/lib/rpmostree-package.c
2df828
index 8575c4a5ed..3bb03bfef0 100644
2df828
--- a/src/lib/rpmostree-package.c
2df828
+++ b/src/lib/rpmostree-package.c
2df828
@@ -32,12 +32,17 @@
2df828
 
2df828
 #include <string.h>
2df828
 #include <stdlib.h>
2df828
-#include <rpm/rpmver.h>
2df828
 #include "libglnx.h"
2df828
 
2df828
 #include "rpmostree-shlib-ipc-private.h"
2df828
 #include "rpmostree-package-priv.h"
2df828
 
2df828
+#if BUILDOPT_HAVE_RPMVER
2df828
+#include <rpm/rpmver.h>
2df828
+#else
2df828
+#include "rpmver-private.h"
2df828
+#endif
2df828
+
2df828
 typedef GObjectClass RpmOstreePackageClass;
2df828
 
2df828
 /* Since the class is small, we perform a poor man's polymorphism; RpmOstreePackage objects
2df828
diff --git a/src/lib/rpmver-private.c b/src/lib/rpmver-private.c
2df828
new file mode 100644
2df828
index 0000000000..117df79206
2df828
--- /dev/null
2df828
+++ b/src/lib/rpmver-private.c
2df828
@@ -0,0 +1,223 @@
2df828
+// Temporary forked internal copy of:
2df828
+// https://github.com/rpm-software-management/rpm/blob/rpm-4.16.1.3/rpmio/rpmver.c
2df828
+// SPDX-License-Identifier: LGPL-2.1-or-later
2df828
+
2df828
+/* NOTE(lucab): compatibility changes to avoid touching the source.
2df828
+ *  The *malloc functions have different behaviors when size=0, but this is not
2df828
+ *  a concern here because all calls in this file have strictly-positive size.
2df828
+ */
2df828
+#include "config.h"
2df828
+#if !BUILDOPT_HAVE_RPMVER
2df828
+#include <glib.h>
2df828
+#define xmalloc(_size) g_malloc((_size))
2df828
+#define free(_mem) g_free((_mem))
2df828
+#include "rpmver-private.h"
2df828
+
2df828
+#include <rpm/rpmstring.h>
2df828
+#include <stdlib.h>
2df828
+
2df828
+struct rpmver_s {
2df828
+    const char *e;
2df828
+    const char *v;
2df828
+    const char *r;
2df828
+    char arena[];
2df828
+};
2df828
+
2df828
+/**
2df828
+ * Split EVR into epoch, version, and release components.
2df828
+ * @param evr		[epoch:]version[-release] string
2df828
+ * @retval *ep		pointer to epoch
2df828
+ * @retval *vp		pointer to version
2df828
+ * @retval *rp		pointer to release
2df828
+ */
2df828
+static
2df828
+void parseEVR(char * evr,
2df828
+		const char ** ep,
2df828
+		const char ** vp,
2df828
+		const char ** rp)
2df828
+{
2df828
+    const char *epoch;
2df828
+    const char *version;		/* assume only version is present */
2df828
+    const char *release;
2df828
+    char *s, *se;
2df828
+
2df828
+    s = evr;
2df828
+    while (*s && risdigit(*s)) s++;	/* s points to epoch terminator */
2df828
+    se = strrchr(s, '-');		/* se points to version terminator */
2df828
+
2df828
+    if (*s == ':') {
2df828
+	epoch = evr;
2df828
+	*s++ = '\0';
2df828
+	version = s;
2df828
+	if (*epoch == '\0') epoch = "0";
2df828
+    } else {
2df828
+	epoch = NULL;	/* XXX disable epoch compare if missing */
2df828
+	version = evr;
2df828
+    }
2df828
+    if (se) {
2df828
+	*se++ = '\0';
2df828
+	release = se;
2df828
+    } else {
2df828
+	release = NULL;
2df828
+    }
2df828
+
2df828
+    if (ep) *ep = epoch;
2df828
+    if (vp) *vp = version;
2df828
+    if (rp) *rp = release;
2df828
+}
2df828
+
2df828
+int rpmverOverlap(rpmver v1, rpmsenseFlags f1, rpmver v2, rpmsenseFlags f2)
2df828
+{
2df828
+    int sense = 0;
2df828
+    int result = 0;
2df828
+
2df828
+    /* Compare {A,B} [epoch:]version[-release] */
2df828
+    if (v1->e && *v1->e && v2->e && *v2->e)
2df828
+	sense = rpmvercmp(v1->e, v2->e);
2df828
+    else if (v1->e && *v1->e && atol(v1->e) > 0) {
2df828
+	sense = 1;
2df828
+    } else if (v2->e && *v2->e && atol(v2->e) > 0)
2df828
+	sense = -1;
2df828
+
2df828
+    if (sense == 0) {
2df828
+	sense = rpmvercmp(v1->v, v2->v);
2df828
+	if (sense == 0) {
2df828
+	    if (v1->r && *v1->r && v2->r && *v2->r) {
2df828
+		sense = rpmvercmp(v1->r, v2->r);
2df828
+	    } else {
2df828
+		/* always matches if the side with no release has SENSE_EQUAL */
2df828
+		if ((v1->r && *v1->r && (f2 & RPMSENSE_EQUAL)) ||
2df828
+		    (v2->r && *v2->r && (f1 & RPMSENSE_EQUAL))) {
2df828
+		    result = 1;
2df828
+		    goto exit;
2df828
+		}
2df828
+	    }
2df828
+	}
2df828
+    }
2df828
+
2df828
+    /* Detect overlap of {A,B} range. */
2df828
+    if (sense < 0 && ((f1 & RPMSENSE_GREATER) || (f2 & RPMSENSE_LESS))) {
2df828
+	result = 1;
2df828
+    } else if (sense > 0 && ((f1 & RPMSENSE_LESS) || (f2 & RPMSENSE_GREATER))) {
2df828
+	result = 1;
2df828
+    } else if (sense == 0 &&
2df828
+	(((f1 & RPMSENSE_EQUAL) && (f2 & RPMSENSE_EQUAL)) ||
2df828
+	 ((f1 & RPMSENSE_LESS) && (f2 & RPMSENSE_LESS)) ||
2df828
+	 ((f1 & RPMSENSE_GREATER) && (f2 & RPMSENSE_GREATER)))) {
2df828
+	result = 1;
2df828
+    }
2df828
+
2df828
+exit:
2df828
+    return result;
2df828
+}
2df828
+
2df828
+static int compare_values(const char *str1, const char *str2)
2df828
+{
2df828
+    if (!str1 && !str2)
2df828
+	return 0;
2df828
+    else if (str1 && !str2)
2df828
+	return 1;
2df828
+    else if (!str1 && str2)
2df828
+	return -1;
2df828
+    return rpmvercmp(str1, str2);
2df828
+}
2df828
+
2df828
+int rpmverCmp(rpmver v1, rpmver v2)
2df828
+{
2df828
+    const char *e1 = (v1->e != NULL) ? v1->e : "0";
2df828
+    const char *e2 = (v2->e != NULL) ? v2->e : "0";
2df828
+
2df828
+    int rc = compare_values(e1, e2);
2df828
+    if (!rc) {
2df828
+	rc = compare_values(v1->v, v2->v);
2df828
+	if (!rc)
2df828
+	    rc = compare_values(v1->r, v2->r);
2df828
+    }
2df828
+    return rc;
2df828
+}
2df828
+
2df828
+uint32_t rpmverEVal(rpmver rv)
2df828
+{
2df828
+    return (rv != NULL && rv->e != NULL) ? atol(rv->e) : 0;
2df828
+}
2df828
+
2df828
+const char *rpmverE(rpmver rv)
2df828
+{
2df828
+    return (rv != NULL) ? rv->e : NULL;
2df828
+}
2df828
+
2df828
+const char *rpmverV(rpmver rv)
2df828
+{
2df828
+    return (rv != NULL) ? rv->v : NULL;
2df828
+}
2df828
+
2df828
+const char *rpmverR(rpmver rv)
2df828
+{
2df828
+    return (rv != NULL) ? rv->r : NULL;
2df828
+}
2df828
+
2df828
+char *rpmverEVR(rpmver rv)
2df828
+{
2df828
+    char *EVR = NULL;
2df828
+    if (rv) {
2df828
+	rstrscat(&EVR, rv->e ? rv-> e : "", rv->e ? ":" : "",
2df828
+		       rv->v,
2df828
+		       rv->r ? "-" : "", rv->r ? rv->r : "", NULL);
2df828
+    }
2df828
+    return EVR;
2df828
+}
2df828
+
2df828
+rpmver rpmverParse(const char *evr)
2df828
+{
2df828
+    rpmver rv = NULL;
2df828
+    if (evr && *evr) {
2df828
+	size_t evrlen = strlen(evr) + 1;
2df828
+	rv = xmalloc(sizeof(*rv) + evrlen);
2df828
+	memcpy(rv->arena, evr, evrlen);
2df828
+	parseEVR(rv->arena, &rv->e, &rv->v, &rv->r);
2df828
+    }
2df828
+    return rv;
2df828
+}
2df828
+
2df828
+rpmver rpmverNew(const char *e, const char *v, const char *r)
2df828
+{
2df828
+    rpmver rv = NULL;
2df828
+
2df828
+    if (v && *v) {
2df828
+	size_t nb = strlen(v) + 1;
2df828
+	nb += (e != NULL) ? strlen(e) + 1 : 0;
2df828
+	nb += (r != NULL) ? strlen(r) + 1 : 0;
2df828
+	rv = xmalloc(sizeof(*rv) + nb);
2df828
+
2df828
+	rv->e = NULL;
2df828
+	rv->v = NULL;
2df828
+	rv->r = NULL;
2df828
+
2df828
+	char *p = rv->arena;
2df828
+	if (e) {
2df828
+	    rv->e = p;
2df828
+	    p = stpcpy(p, e);
2df828
+	    p++;
2df828
+	}
2df828
+
2df828
+	rv->v = p;
2df828
+	p = stpcpy(p, v);
2df828
+	p++;
2df828
+
2df828
+	if (r) {
2df828
+	    rv->r = p;
2df828
+	    p = stpcpy(p, r);
2df828
+	    p++;
2df828
+	}
2df828
+    }
2df828
+    return rv;
2df828
+}
2df828
+
2df828
+rpmver rpmverFree(rpmver rv)
2df828
+{
2df828
+    if (rv) {
2df828
+	free(rv);
2df828
+    }
2df828
+    return NULL;
2df828
+}
2df828
+#endif
2df828
diff --git a/src/lib/rpmver-private.h b/src/lib/rpmver-private.h
2df828
new file mode 100644
2df828
index 0000000000..f875c2f9d3
2df828
--- /dev/null
2df828
+++ b/src/lib/rpmver-private.h
2df828
@@ -0,0 +1,108 @@
2df828
+// Temporary forked internal copy of
2df828
+// https://github.com/rpm-software-management/rpm/blob/rpm-4.16.1.3/rpmio/rpmver.h
2df828
+// SPDX-License-Identifier: LGPL-2.1-or-later
2df828
+
2df828
+#ifndef _RPMVER_H
2df828
+#define _RPMVER_H
2df828
+
2df828
+#include <rpm/rpmtypes.h>
2df828
+#include <rpm/rpmds.h>		/* sense flags */
2df828
+
2df828
+#ifdef __cplusplus
2df828
+extern "C" {
2df828
+#endif
2df828
+
2df828
+// NOTE(lucab): Backported from <rpm/rpmtypes.h>.
2df828
+#ifndef rpmver
2df828
+typedef struct rpmver_s * rpmver;
2df828
+#endif
2df828
+
2df828
+/** \ingroup rpmver
2df828
+ * Segmented string compare for version or release strings.
2df828
+ *
2df828
+ * @param a		1st string
2df828
+ * @param b		2nd string
2df828
+ * @return		+1 if a is "newer", 0 if equal, -1 if b is "newer"
2df828
+ */
2df828
+int rpmvercmp(const char * a, const char * b);
2df828
+
2df828
+/** \ingroup rpmver
2df828
+ * Parse rpm version handle from evr string
2df828
+ *
2df828
+ * @param evr		[epoch:]version[-release] string
2df828
+ * @return		rpm version, NULL on invalid evr
2df828
+ */
2df828
+rpmver rpmverParse(const char *evr);
2df828
+
2df828
+/** \ingroup rpmver
2df828
+ * Create new rpm version handle from e, v, r components
2df828
+ *
2df828
+ * @param e		epoch (or NULL)
2df828
+ * @param v		version
2df828
+ * @param r		release (or NULL)
2df828
+ * @return		rpm version, NULL on invalid
2df828
+ */
2df828
+rpmver rpmverNew(const char *e, const char *v, const char *r);
2df828
+
2df828
+/** \ingroup rpmver
2df828
+ * Free rpm version handle
2df828
+ *
2df828
+ * @param rv		rpm version handle
2df828
+ * @return		NULL always
2df828
+ */
2df828
+rpmver rpmverFree(rpmver rv);
2df828
+
2df828
+/** \ingroup rpmver
2df828
+ * @param rv		rpm version handle
2df828
+ * @return		numerical value of epoch
2df828
+ */
2df828
+uint32_t rpmverEVal(rpmver rv);
2df828
+
2df828
+/** \ingroup rpmver
2df828
+ * @param rv		rpm version handle
2df828
+ * @return		epoch portion
2df828
+ */
2df828
+const char *rpmverE(rpmver rv);
2df828
+
2df828
+/** \ingroup rpmver
2df828
+ * @param rv		rpm version handle
2df828
+ * @return		version portion
2df828
+ */
2df828
+const char *rpmverV(rpmver rv);
2df828
+
2df828
+/** \ingroup rpmver
2df828
+ * @param rv		rpm version handle
2df828
+ * @return		release portion
2df828
+ */
2df828
+const char *rpmverR(rpmver rv);
2df828
+
2df828
+/** \ingroup rpmver
2df828
+ * @param rv		rpm version handle
2df828
+ * @return		formatted [E:]V[-R] string (malloced)
2df828
+ */
2df828
+char *rpmverEVR(rpmver rv);
2df828
+
2df828
+/** \ingroup rpmver
2df828
+ * Compare two rpm version handles
2df828
+ *
2df828
+ * @param v1		1st version handle
2df828
+ * @param v2		2nd version handle
2df828
+ * @return		0 if equal, -1 if v1 smaller, 1 if greater, than v2
2df828
+ */
2df828
+int rpmverCmp(rpmver v1, rpmver v2);
2df828
+
2df828
+/** \ingroup rpmver
2df828
+ * Determine whether two versioned ranges overlap.
2df828
+ * @param v1		1st version
2df828
+ * @param f1		1st sense flags
2df828
+ * @param v2		2nd version
2df828
+ * @param f2		2nd sense flags
2df828
+ * @return		1 if ranges overlap, 0 otherwise
2df828
+ */
2df828
+int rpmverOverlap(rpmver v1, rpmsenseFlags f1, rpmver v2, rpmsenseFlags f2);
2df828
+
2df828
+#ifdef __cplusplus
2df828
+}
2df828
+#endif
2df828
+
2df828
+#endif /* _RPMVER_H */
2df828
2df828
From a74a3163b2ae315b5f95d9d7642e868794c47628 Mon Sep 17 00:00:00 2001
2df828
From: Luca BRUNO <luca.bruno@coreos.com>
2df828
Date: Mon, 31 May 2021 11:00:10 +0000
2df828
Subject: [PATCH 2/6] lib/rpmver: replace tabs with spaces
2df828
2df828
---
2df828
 src/lib/rpmver-private.c | 160 +++++++++++++++++++--------------------
2df828
 src/lib/rpmver-private.h |  60 +++++++--------
2df828
 2 files changed, 110 insertions(+), 110 deletions(-)
2df828
2df828
diff --git a/src/lib/rpmver-private.c b/src/lib/rpmver-private.c
2df828
index 117df79206..6882be0d1e 100644
2df828
--- a/src/lib/rpmver-private.c
2df828
+++ b/src/lib/rpmver-private.c
2df828
@@ -25,40 +25,40 @@ struct rpmver_s {
2df828
 
2df828
 /**
2df828
  * Split EVR into epoch, version, and release components.
2df828
- * @param evr		[epoch:]version[-release] string
2df828
- * @retval *ep		pointer to epoch
2df828
- * @retval *vp		pointer to version
2df828
- * @retval *rp		pointer to release
2df828
+ * @param evr                [epoch:]version[-release] string
2df828
+ * @retval *ep                pointer to epoch
2df828
+ * @retval *vp                pointer to version
2df828
+ * @retval *rp                pointer to release
2df828
  */
2df828
 static
2df828
 void parseEVR(char * evr,
2df828
-		const char ** ep,
2df828
-		const char ** vp,
2df828
-		const char ** rp)
2df828
+                const char ** ep,
2df828
+                const char ** vp,
2df828
+                const char ** rp)
2df828
 {
2df828
     const char *epoch;
2df828
-    const char *version;		/* assume only version is present */
2df828
+    const char *version;                /* assume only version is present */
2df828
     const char *release;
2df828
     char *s, *se;
2df828
 
2df828
     s = evr;
2df828
-    while (*s && risdigit(*s)) s++;	/* s points to epoch terminator */
2df828
-    se = strrchr(s, '-');		/* se points to version terminator */
2df828
+    while (*s && risdigit(*s)) s++;        /* s points to epoch terminator */
2df828
+    se = strrchr(s, '-');                /* se points to version terminator */
2df828
 
2df828
     if (*s == ':') {
2df828
-	epoch = evr;
2df828
-	*s++ = '\0';
2df828
-	version = s;
2df828
-	if (*epoch == '\0') epoch = "0";
2df828
+        epoch = evr;
2df828
+        *s++ = '\0';
2df828
+        version = s;
2df828
+        if (*epoch == '\0') epoch = "0";
2df828
     } else {
2df828
-	epoch = NULL;	/* XXX disable epoch compare if missing */
2df828
-	version = evr;
2df828
+        epoch = NULL;        /* XXX disable epoch compare if missing */
2df828
+        version = evr;
2df828
     }
2df828
     if (se) {
2df828
-	*se++ = '\0';
2df828
-	release = se;
2df828
+        *se++ = '\0';
2df828
+        release = se;
2df828
     } else {
2df828
-	release = NULL;
2df828
+        release = NULL;
2df828
     }
2df828
 
2df828
     if (ep) *ep = epoch;
2df828
@@ -73,38 +73,38 @@ int rpmverOverlap(rpmver v1, rpmsenseFlags f1, rpmver v2, rpmsenseFlags f2)
2df828
 
2df828
     /* Compare {A,B} [epoch:]version[-release] */
2df828
     if (v1->e && *v1->e && v2->e && *v2->e)
2df828
-	sense = rpmvercmp(v1->e, v2->e);
2df828
+        sense = rpmvercmp(v1->e, v2->e);
2df828
     else if (v1->e && *v1->e && atol(v1->e) > 0) {
2df828
-	sense = 1;
2df828
+        sense = 1;
2df828
     } else if (v2->e && *v2->e && atol(v2->e) > 0)
2df828
-	sense = -1;
2df828
+        sense = -1;
2df828
 
2df828
     if (sense == 0) {
2df828
-	sense = rpmvercmp(v1->v, v2->v);
2df828
-	if (sense == 0) {
2df828
-	    if (v1->r && *v1->r && v2->r && *v2->r) {
2df828
-		sense = rpmvercmp(v1->r, v2->r);
2df828
-	    } else {
2df828
-		/* always matches if the side with no release has SENSE_EQUAL */
2df828
-		if ((v1->r && *v1->r && (f2 & RPMSENSE_EQUAL)) ||
2df828
-		    (v2->r && *v2->r && (f1 & RPMSENSE_EQUAL))) {
2df828
-		    result = 1;
2df828
-		    goto exit;
2df828
-		}
2df828
-	    }
2df828
-	}
2df828
+        sense = rpmvercmp(v1->v, v2->v);
2df828
+        if (sense == 0) {
2df828
+            if (v1->r && *v1->r && v2->r && *v2->r) {
2df828
+                sense = rpmvercmp(v1->r, v2->r);
2df828
+            } else {
2df828
+                /* always matches if the side with no release has SENSE_EQUAL */
2df828
+                if ((v1->r && *v1->r && (f2 & RPMSENSE_EQUAL)) ||
2df828
+                    (v2->r && *v2->r && (f1 & RPMSENSE_EQUAL))) {
2df828
+                    result = 1;
2df828
+                    goto exit;
2df828
+                }
2df828
+            }
2df828
+        }
2df828
     }
2df828
 
2df828
     /* Detect overlap of {A,B} range. */
2df828
     if (sense < 0 && ((f1 & RPMSENSE_GREATER) || (f2 & RPMSENSE_LESS))) {
2df828
-	result = 1;
2df828
+        result = 1;
2df828
     } else if (sense > 0 && ((f1 & RPMSENSE_LESS) || (f2 & RPMSENSE_GREATER))) {
2df828
-	result = 1;
2df828
+        result = 1;
2df828
     } else if (sense == 0 &&
2df828
-	(((f1 & RPMSENSE_EQUAL) && (f2 & RPMSENSE_EQUAL)) ||
2df828
-	 ((f1 & RPMSENSE_LESS) && (f2 & RPMSENSE_LESS)) ||
2df828
-	 ((f1 & RPMSENSE_GREATER) && (f2 & RPMSENSE_GREATER)))) {
2df828
-	result = 1;
2df828
+        (((f1 & RPMSENSE_EQUAL) && (f2 & RPMSENSE_EQUAL)) ||
2df828
+         ((f1 & RPMSENSE_LESS) && (f2 & RPMSENSE_LESS)) ||
2df828
+         ((f1 & RPMSENSE_GREATER) && (f2 & RPMSENSE_GREATER)))) {
2df828
+        result = 1;
2df828
     }
2df828
 
2df828
 exit:
2df828
@@ -114,11 +114,11 @@ int rpmverOverlap(rpmver v1, rpmsenseFlags f1, rpmver v2, rpmsenseFlags f2)
2df828
 static int compare_values(const char *str1, const char *str2)
2df828
 {
2df828
     if (!str1 && !str2)
2df828
-	return 0;
2df828
+        return 0;
2df828
     else if (str1 && !str2)
2df828
-	return 1;
2df828
+        return 1;
2df828
     else if (!str1 && str2)
2df828
-	return -1;
2df828
+        return -1;
2df828
     return rpmvercmp(str1, str2);
2df828
 }
2df828
 
2df828
@@ -129,9 +129,9 @@ int rpmverCmp(rpmver v1, rpmver v2)
2df828
 
2df828
     int rc = compare_values(e1, e2);
2df828
     if (!rc) {
2df828
-	rc = compare_values(v1->v, v2->v);
2df828
-	if (!rc)
2df828
-	    rc = compare_values(v1->r, v2->r);
2df828
+        rc = compare_values(v1->v, v2->v);
2df828
+        if (!rc)
2df828
+            rc = compare_values(v1->r, v2->r);
2df828
     }
2df828
     return rc;
2df828
 }
2df828
@@ -160,9 +160,9 @@ char *rpmverEVR(rpmver rv)
2df828
 {
2df828
     char *EVR = NULL;
2df828
     if (rv) {
2df828
-	rstrscat(&EVR, rv->e ? rv-> e : "", rv->e ? ":" : "",
2df828
-		       rv->v,
2df828
-		       rv->r ? "-" : "", rv->r ? rv->r : "", NULL);
2df828
+        rstrscat(&EVR, rv->e ? rv-> e : "", rv->e ? ":" : "",
2df828
+                       rv->v,
2df828
+                       rv->r ? "-" : "", rv->r ? rv->r : "", NULL);
2df828
     }
2df828
     return EVR;
2df828
 }
2df828
@@ -171,10 +171,10 @@ rpmver rpmverParse(const char *evr)
2df828
 {
2df828
     rpmver rv = NULL;
2df828
     if (evr && *evr) {
2df828
-	size_t evrlen = strlen(evr) + 1;
2df828
-	rv = xmalloc(sizeof(*rv) + evrlen);
2df828
-	memcpy(rv->arena, evr, evrlen);
2df828
-	parseEVR(rv->arena, &rv->e, &rv->v, &rv->r);
2df828
+        size_t evrlen = strlen(evr) + 1;
2df828
+        rv = xmalloc(sizeof(*rv) + evrlen);
2df828
+        memcpy(rv->arena, evr, evrlen);
2df828
+        parseEVR(rv->arena, &rv->e, &rv->v, &rv->r);
2df828
     }
2df828
     return rv;
2df828
 }
2df828
@@ -184,31 +184,31 @@ rpmver rpmverNew(const char *e, const char *v, const char *r)
2df828
     rpmver rv = NULL;
2df828
 
2df828
     if (v && *v) {
2df828
-	size_t nb = strlen(v) + 1;
2df828
-	nb += (e != NULL) ? strlen(e) + 1 : 0;
2df828
-	nb += (r != NULL) ? strlen(r) + 1 : 0;
2df828
-	rv = xmalloc(sizeof(*rv) + nb);
2df828
-
2df828
-	rv->e = NULL;
2df828
-	rv->v = NULL;
2df828
-	rv->r = NULL;
2df828
-
2df828
-	char *p = rv->arena;
2df828
-	if (e) {
2df828
-	    rv->e = p;
2df828
-	    p = stpcpy(p, e);
2df828
-	    p++;
2df828
-	}
2df828
-
2df828
-	rv->v = p;
2df828
-	p = stpcpy(p, v);
2df828
-	p++;
2df828
-
2df828
-	if (r) {
2df828
-	    rv->r = p;
2df828
-	    p = stpcpy(p, r);
2df828
-	    p++;
2df828
-	}
2df828
+        size_t nb = strlen(v) + 1;
2df828
+        nb += (e != NULL) ? strlen(e) + 1 : 0;
2df828
+        nb += (r != NULL) ? strlen(r) + 1 : 0;
2df828
+        rv = xmalloc(sizeof(*rv) + nb);
2df828
+
2df828
+        rv->e = NULL;
2df828
+        rv->v = NULL;
2df828
+        rv->r = NULL;
2df828
+
2df828
+        char *p = rv->arena;
2df828
+        if (e) {
2df828
+            rv->e = p;
2df828
+            p = stpcpy(p, e);
2df828
+            p++;
2df828
+        }
2df828
+
2df828
+        rv->v = p;
2df828
+        p = stpcpy(p, v);
2df828
+        p++;
2df828
+
2df828
+        if (r) {
2df828
+            rv->r = p;
2df828
+            p = stpcpy(p, r);
2df828
+            p++;
2df828
+        }
2df828
     }
2df828
     return rv;
2df828
 }
2df828
@@ -216,7 +216,7 @@ rpmver rpmverNew(const char *e, const char *v, const char *r)
2df828
 rpmver rpmverFree(rpmver rv)
2df828
 {
2df828
     if (rv) {
2df828
-	free(rv);
2df828
+        free(rv);
2df828
     }
2df828
     return NULL;
2df828
 }
2df828
diff --git a/src/lib/rpmver-private.h b/src/lib/rpmver-private.h
2df828
index f875c2f9d3..458279e202 100644
2df828
--- a/src/lib/rpmver-private.h
2df828
+++ b/src/lib/rpmver-private.h
2df828
@@ -6,7 +6,7 @@
2df828
 #define _RPMVER_H
2df828
 
2df828
 #include <rpm/rpmtypes.h>
2df828
-#include <rpm/rpmds.h>		/* sense flags */
2df828
+#include <rpm/rpmds.h>                /* sense flags */
2df828
 
2df828
 #ifdef __cplusplus
2df828
 extern "C" {
2df828
@@ -20,84 +20,84 @@ typedef struct rpmver_s * rpmver;
2df828
 /** \ingroup rpmver
2df828
  * Segmented string compare for version or release strings.
2df828
  *
2df828
- * @param a		1st string
2df828
- * @param b		2nd string
2df828
- * @return		+1 if a is "newer", 0 if equal, -1 if b is "newer"
2df828
+ * @param a                1st string
2df828
+ * @param b                2nd string
2df828
+ * @return                +1 if a is "newer", 0 if equal, -1 if b is "newer"
2df828
  */
2df828
 int rpmvercmp(const char * a, const char * b);
2df828
 
2df828
 /** \ingroup rpmver
2df828
  * Parse rpm version handle from evr string
2df828
  *
2df828
- * @param evr		[epoch:]version[-release] string
2df828
- * @return		rpm version, NULL on invalid evr
2df828
+ * @param evr                [epoch:]version[-release] string
2df828
+ * @return                rpm version, NULL on invalid evr
2df828
  */
2df828
 rpmver rpmverParse(const char *evr);
2df828
 
2df828
 /** \ingroup rpmver
2df828
  * Create new rpm version handle from e, v, r components
2df828
  *
2df828
- * @param e		epoch (or NULL)
2df828
- * @param v		version
2df828
- * @param r		release (or NULL)
2df828
- * @return		rpm version, NULL on invalid
2df828
+ * @param e                epoch (or NULL)
2df828
+ * @param v                version
2df828
+ * @param r                release (or NULL)
2df828
+ * @return                rpm version, NULL on invalid
2df828
  */
2df828
 rpmver rpmverNew(const char *e, const char *v, const char *r);
2df828
 
2df828
 /** \ingroup rpmver
2df828
  * Free rpm version handle
2df828
  *
2df828
- * @param rv		rpm version handle
2df828
- * @return		NULL always
2df828
+ * @param rv                rpm version handle
2df828
+ * @return                NULL always
2df828
  */
2df828
 rpmver rpmverFree(rpmver rv);
2df828
 
2df828
 /** \ingroup rpmver
2df828
- * @param rv		rpm version handle
2df828
- * @return		numerical value of epoch
2df828
+ * @param rv                rpm version handle
2df828
+ * @return                numerical value of epoch
2df828
  */
2df828
 uint32_t rpmverEVal(rpmver rv);
2df828
 
2df828
 /** \ingroup rpmver
2df828
- * @param rv		rpm version handle
2df828
- * @return		epoch portion
2df828
+ * @param rv                rpm version handle
2df828
+ * @return                epoch portion
2df828
  */
2df828
 const char *rpmverE(rpmver rv);
2df828
 
2df828
 /** \ingroup rpmver
2df828
- * @param rv		rpm version handle
2df828
- * @return		version portion
2df828
+ * @param rv                rpm version handle
2df828
+ * @return                version portion
2df828
  */
2df828
 const char *rpmverV(rpmver rv);
2df828
 
2df828
 /** \ingroup rpmver
2df828
- * @param rv		rpm version handle
2df828
- * @return		release portion
2df828
+ * @param rv                rpm version handle
2df828
+ * @return                release portion
2df828
  */
2df828
 const char *rpmverR(rpmver rv);
2df828
 
2df828
 /** \ingroup rpmver
2df828
- * @param rv		rpm version handle
2df828
- * @return		formatted [E:]V[-R] string (malloced)
2df828
+ * @param rv                rpm version handle
2df828
+ * @return                formatted [E:]V[-R] string (malloced)
2df828
  */
2df828
 char *rpmverEVR(rpmver rv);
2df828
 
2df828
 /** \ingroup rpmver
2df828
  * Compare two rpm version handles
2df828
  *
2df828
- * @param v1		1st version handle
2df828
- * @param v2		2nd version handle
2df828
- * @return		0 if equal, -1 if v1 smaller, 1 if greater, than v2
2df828
+ * @param v1                1st version handle
2df828
+ * @param v2                2nd version handle
2df828
+ * @return                0 if equal, -1 if v1 smaller, 1 if greater, than v2
2df828
  */
2df828
 int rpmverCmp(rpmver v1, rpmver v2);
2df828
 
2df828
 /** \ingroup rpmver
2df828
  * Determine whether two versioned ranges overlap.
2df828
- * @param v1		1st version
2df828
- * @param f1		1st sense flags
2df828
- * @param v2		2nd version
2df828
- * @param f2		2nd sense flags
2df828
- * @return		1 if ranges overlap, 0 otherwise
2df828
+ * @param v1                1st version
2df828
+ * @param f1                1st sense flags
2df828
+ * @param v2                2nd version
2df828
+ * @param f2                2nd sense flags
2df828
+ * @return                1 if ranges overlap, 0 otherwise
2df828
  */
2df828
 int rpmverOverlap(rpmver v1, rpmsenseFlags f1, rpmver v2, rpmsenseFlags f2);
2df828