[packages/libhif] - new, with preliminary rpm5 port

qboosh qboosh at pld-linux.org
Sun Jun 15 09:35:03 CEST 2014


commit fc7c04832d134b3ccbfb84ab4ce3f9c59fadee83
Author: Jakub Bogusz <qboosh at pld-linux.org>
Date:   Sun Jun 15 09:38:47 2014 +0200

    - new, with preliminary rpm5 port

 libhif-rpm5.patch | 479 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 libhif.spec       | 119 ++++++++++++++
 2 files changed, 598 insertions(+)
---
diff --git a/libhif.spec b/libhif.spec
new file mode 100644
index 0000000..543f36a
--- /dev/null
+++ b/libhif.spec
@@ -0,0 +1,119 @@
+Summary:	Simple package library built on top of hawkey and librepo
+Summary(pl.UTF-8):	Prosta biblioteka obsługi pakietów oparta na bibliotekach hawkey i librepo
+Name:		libhif
+Version:	0.1.0
+Release:	1
+License:	LGPL v2.1+
+Group:		Libraries
+Source0:	http://people.freedesktop.org/~hughsient/releases/%{name}-%{version}.tar.xz
+# Source0-md5:	50d2fcc5cd61d93af70168a4a4ea1e1b
+Patch0:		%{name}-rpm5.patch
+URL:		https://github.com/hughsie/libhif
+BuildRequires:	glib2-devel >= 1:2.36.0
+BuildRequires:	gobject-introspection-devel >= 0.9.8
+BuildRequires:	gtk-doc >= 1.9
+BuildRequires:	hawkey-devel >= 0.4.6
+BuildRequires:	librepo-devel >= 0.1.5
+BuildRequires:	libsolv-devel
+BuildRequires:	pkgconfig
+BuildRequires:	rpm-devel >= 5
+BuildRequires:	tar >= 1:1.22
+BuildRequires:	xz
+Requires:	glib2 >= 1:2.36.0
+Requires:	hawkey >= 0.4.6
+Requires:	librepo >= 0.1.5
+BuildRoot:	%{tmpdir}/%{name}-%{version}-root-%(id -u -n)
+
+%description
+This library provides a simple interface to hawkey and librepo and is
+currently used by PackageKit and rpm-ostree.
+
+%description -l pl.UTF-8
+Ta biblioteka udostępnia prosty interfejs do bibliotek hawkey i
+librepo, jest obecnie używana przez pakiety PackageKit i rpm-ostree.
+
+%package devel
+Summary:	Header files for libhif library
+Summary(pl.UTF-8):	Pliki nagłówkowe biblioteki libhif
+Group:		Development/Libraries
+Requires:	%{name} = %{version}-%{release}
+Requires:	glib2-devel >= 1:2.36.0
+Requires:	hawkey-devel >= 0.4.6
+Requires:	librepo-devel >= 0.1.5
+Requires:	rpm-devel >= 5
+
+%description devel
+Header files for libhif library.
+
+%description devel -l pl.UTF-8
+Pliki nagłówkowe biblioteki libhif.
+
+%package static
+Summary:	Static libhif library
+Summary(pl.UTF-8):	Statyczna biblioteka libhif
+Group:		Development/Libraries
+Requires:	%{name}-devel = %{version}-%{release}
+
+%description static
+Static libhif library.
+
+%description static -l pl.UTF-8
+Statyczna biblioteka libhif.
+
+%package apidocs
+Summary:	libhif API documentation
+Summary(pl.UTF-8):	Dokumentacja API biblioteki libhif
+Group:		Documentation
+
+%description apidocs
+API documentation for libhif library.
+
+%description apidocs -l pl.UTF-8
+Dokumentacja API biblioteki libhif.
+
+%prep
+%setup -q
+%patch0 -p1
+
+%build
+%configure \
+	--disable-silent-rules \
+	--with-html-dir=%{_gtkdocdir}
+%{__make}
+
+%install
+rm -rf $RPM_BUILD_ROOT
+
+%{__make} install \
+	DESTDIR=$RPM_BUILD_ROOT
+
+# obsoleted by pkg-config
+%{__rm} $RPM_BUILD_ROOT%{_libdir}/libhif.la
+
+%clean
+rm -rf $RPM_BUILD_ROOT
+
+%post	-p /sbin/ldconfig
+%postun	-p /sbin/ldconfig
+
+%files
+%defattr(644,root,root,755)
+%doc AUTHORS MAINTAINERS NEWS README.md
+%attr(755,root,root) %{_libdir}/libhif.so.*.*.*
+%attr(755,root,root) %ghost %{_libdir}/libhif.so.1
+%{_libdir}/girepository-1.0/Hif-1.0.typelib
+
+%files devel
+%defattr(644,root,root,755)
+%attr(755,root,root) %{_libdir}/libhif.so
+%{_datadir}/gir-1.0/Hif-1.0.gir
+%{_includedir}/libhif
+%{_pkgconfigdir}/libhif.pc
+
+%files static
+%defattr(644,root,root,755)
+%{_libdir}/libhif.a
+
+%files apidocs
+%defattr(644,root,root,755)
+%{_gtkdocdir}/libhif
diff --git a/libhif-rpm5.patch b/libhif-rpm5.patch
new file mode 100644
index 0000000..095539c
--- /dev/null
+++ b/libhif-rpm5.patch
@@ -0,0 +1,479 @@
+--- libhif-0.1.0/libhif/hif-context.c.orig	2014-06-04 10:15:54.000000000 +0200
++++ libhif-0.1.0/libhif/hif-context.c	2014-06-15 07:25:26.340531502 +0200
+@@ -31,7 +31,8 @@
+ 
+ #include "config.h"
+ 
+-#include <rpm/rpmlib.h>
++#include <rpm/rpmmacro.h>
++#include <rpm/rpmrc.h>
+ 
+ #include <hawkey/query.h>
+ #include <hawkey/packagelist.h>
+@@ -801,13 +802,17 @@ hif_context_setup (HifContext *context,
+ 	}
+ 
+ 	/* get info from RPM */
+-	rpmGetOsInfo (&value, NULL);
++	value = rpmExpand ("%{_target_os}", NULL);
+ 	priv->os_info = g_strdup (value);
+-	rpmGetArchInfo (&value, NULL);
++	value = rpmExpand ("%{_target_cpu}", NULL);
+ 	priv->arch_info = g_strdup (value);
+ 	if (g_strcmp0 (value, "i486") == 0 ||
+ 	    g_strcmp0 (value, "i586") == 0 ||
+-	    g_strcmp0 (value, "i686") == 0) {
++	    g_strcmp0 (value, "i686") == 0 ||
++	    g_strcmp0 (value, "athlon") == 0 ||
++	    g_strcmp0 (value, "pentium2") == 0 ||
++	    g_strcmp0 (value, "pentium3") == 0 ||
++	    g_strcmp0 (value, "pentium4") == 0) {
+ 		value = "i386";
+ 	} else if (g_strcmp0 (value, "armv7l") == 0 ||
+ 		   g_strcmp0 (value, "armv6l") == 0 ||
+--- libhif-0.1.0/libhif/hif-keyring.c.orig	2014-06-04 10:15:54.000000000 +0200
++++ libhif-0.1.0/libhif/hif-keyring.c	2014-06-15 07:51:30.257165572 +0200
+@@ -35,7 +35,9 @@
+ 
+ #include <stdlib.h>
+ #include <glib.h>
+-#include <rpm/rpmlib.h>
++#include "rpmorg-compat.h"
++#include <rpm/rpmcli.h>
++#include <rpm/rpmio.h>
+ #include <rpm/rpmts.h>
+ 
+ #include "hif-cleanup.h"
+@@ -55,7 +57,7 @@
+  * Since: 0.1.0
+  **/
+ gboolean
+-hif_keyring_add_public_key (rpmKeyring keyring,
++hif_keyring_add_public_key (const rpmts ts,
+ 			    const gchar *filename,
+ 			    GError **error)
+ {
+@@ -63,10 +65,7 @@ hif_keyring_add_public_key (rpmKeyring k
+ 	gint rc;
+ 	gsize len;
+ 	pgpArmor armor;
+-	pgpDig dig = NULL;
+-	rpmPubkey pubkey = NULL;
+ 	uint8_t *pkt = NULL;
+-	_cleanup_free_ gchar *data = NULL;
+ 
+ 	/* ignore symlinks and directories */
+ 	if (!g_file_test (filename, G_FILE_TEST_IS_REGULAR))
+@@ -74,13 +73,8 @@ hif_keyring_add_public_key (rpmKeyring k
+ 	if (g_file_test (filename, G_FILE_TEST_IS_SYMLINK))
+ 		goto out;
+ 
+-	/* get data */
+-	ret = g_file_get_contents (filename, &data, &len, error);
+-	if (!ret)
+-		goto out;
+-
+ 	/* rip off the ASCII armor and parse it */
+-	armor = pgpParsePkts (data, &pkt, &len);
++	armor = pgpReadPkts (filename, &pkt, &len);
+ 	if (armor < 0) {
+ 		ret = FALSE;
+ 		g_set_error (error,
+@@ -103,7 +97,7 @@ hif_keyring_add_public_key (rpmKeyring k
+ 	}
+ 
+ 	/* test each one */
+-	pubkey = rpmPubkeyNew (pkt, len);
++/*	pubkey = rpmPubkeyNew (pkt, len);
+ 	if (pubkey == NULL) {
+ 		ret = FALSE;
+ 		g_set_error (error,
+@@ -112,19 +106,19 @@ hif_keyring_add_public_key (rpmKeyring k
+ 			     "failed to parse public key for %s",
+ 			     filename);
+ 		goto out;
+-	}
++	} */
+ 
+ 	/* does the key exist in the keyring */
+-	dig = rpmPubkeyDig (pubkey);
++/*	dig = rpmPubkeyDig (pubkey);
+ 	rc = rpmKeyringLookup (keyring, dig);
+ 	if (rc == RPMRC_OK) {
+ 		ret = TRUE;
+ 		g_debug ("%s is already present", filename);
+ 		goto out;
+-	}
++	} */
+ 
+ 	/* add to rpmdb automatically, without a prompt */
+-	rc = rpmKeyringAddKey (keyring, pubkey);
++	rc = rpmcliImportPubkey (ts, pkt, len);
+ 	if (rc == 1) {
+ 		ret = TRUE;
+ 		g_debug ("%s is already added", filename);
+@@ -146,10 +140,6 @@ hif_keyring_add_public_key (rpmKeyring k
+ out:
+ 	if (pkt != NULL)
+ 		free (pkt); /* yes, free() */
+-	if (pubkey != NULL)
+-		rpmPubkeyFree (pubkey);
+-	if (dig != NULL)
+-		pgpFreeDig (dig);
+ 	return ret;
+ }
+ 
+@@ -165,7 +155,7 @@ out:
+  * Since: 0.1.0
+  **/
+ gboolean
+-hif_keyring_add_public_keys (rpmKeyring keyring, GError **error)
++hif_keyring_add_public_keys (rpmts ts, GError **error)
+ {
+ 	const gchar *gpg_dir = "/etc/pki/rpm-gpg";
+ 	gboolean ret = TRUE;
+@@ -182,7 +172,7 @@ hif_keyring_add_public_keys (rpmKeyring
+ 		if (filename == NULL)
+ 			break;
+ 		path_tmp = g_build_filename (gpg_dir, filename, NULL);
+-		ret = hif_keyring_add_public_key (keyring, path_tmp, error);
++		ret = hif_keyring_add_public_key (ts, path_tmp, error);
+ 	} while (ret);
+ 	return TRUE;
+ }
+@@ -191,7 +181,7 @@ hif_keyring_add_public_keys (rpmKeyring
+  * hif_keyring_check_untrusted_file:
+  */
+ gboolean
+-hif_keyring_check_untrusted_file (rpmKeyring keyring,
++hif_keyring_check_untrusted_file (
+ 				  const gchar *filename,
+ 				  GError **error)
+ {
+@@ -242,10 +232,10 @@ hif_keyring_check_untrusted_file (rpmKey
+ 	}
+ 
+ 	/* convert and upscale */
+-	headerConvert (hdr, HEADERCONV_RETROFIT_V3);
++/*	headerConvert (hdr, HEADERCONV_RETROFIT_V3); */
+ 
+ 	/* get RSA key */
+-	td = rpmtdNew ();
++	td = malloc (sizeof (*td));
+ 	rc = headerGet (hdr,
+ 			RPMTAG_RSAHEADER,
+ 			td,
+@@ -269,7 +259,7 @@ hif_keyring_check_untrusted_file (rpmKey
+ 	}
+ 
+ 	/* make it into a digest */
+-	dig = pgpNewDig ();
++	dig = rpmtsDig (ts);
+ 	rc = pgpPrtPkts (td->data, td->count, dig, 0);
+ 	if (rc != 0) {
+ 		g_set_error (error,
+@@ -281,7 +271,7 @@ hif_keyring_check_untrusted_file (rpmKey
+ 	}
+ 
+ 	/* does the key exist in the keyring */
+-	rc = rpmKeyringLookup (keyring, dig);
++	rc = rpmtsFindPubkey (ts, dig);
+ 	if (rc != RPMRC_OK) {
+ 		g_set_error_literal (error,
+ 				     HIF_ERROR,
+@@ -295,18 +285,18 @@ hif_keyring_check_untrusted_file (rpmKey
+ 	ret = TRUE;
+ out:
+ 	if (dig != NULL)
+-		pgpFreeDig (dig);
++		dig = pgpDigFree (dig);
+ 	if (td != NULL) {
+ 		rpmtdFreeData (td);
+-		rpmtdFree (td);
++		free (td);
+ 	}
+ 	if (ts != NULL)
+-		rpmtsFree (ts);
++		ts = rpmtsFree (ts);
+ 	if (hdr != NULL)
+-		headerFree (hdr);
++		hdr = headerFree (hdr);
+ 	if (fd != NULL)
+ 		Fclose (fd);
+ 	if (header != NULL)
+-		headerFree (header);
++		header = headerFree (header);
+ 	return ret;
+ }
+--- libhif-0.1.0/libhif/hif-keyring.h.orig	2014-03-28 17:30:12.000000000 +0100
++++ libhif-0.1.0/libhif/hif-keyring.h	2014-06-15 07:27:41.550528685 +0200
+@@ -28,14 +28,14 @@
+ 
+ #include <glib.h>
+ 
+-#include <rpm/rpmkeyring.h>
++#include <rpm/rpmts.h>
+ 
+-gboolean	 hif_keyring_add_public_key	(rpmKeyring		 keyring,
++gboolean	 hif_keyring_add_public_key	(const rpmts		 ts,
+ 						 const gchar		*filename,
+ 						 GError			**error);
+-gboolean	 hif_keyring_add_public_keys	(rpmKeyring		 keyring,
++gboolean	 hif_keyring_add_public_keys	(rpmts                   ts,
+ 						 GError			**error);
+-gboolean	 hif_keyring_check_untrusted_file (rpmKeyring		 keyring,
++gboolean	 hif_keyring_check_untrusted_file (
+ 						 const gchar		*filename,
+ 						 GError			**error);
+ 
+--- libhif-0.1.0/libhif/hif-transaction.c.orig	2014-06-10 12:06:55.000000000 +0200
++++ libhif-0.1.0/libhif/hif-transaction.c	2014-06-15 08:04:22.977149465 +0200
+@@ -30,7 +30,8 @@
+ 
+ #include "config.h"
+ 
+-#include <rpm/rpmlib.h>
++#include "rpmorg-compat.h"
++#include <rpm/rpmio.h>
+ #include <rpm/rpmts.h>
+ #include <rpm/rpmlog.h>
+ 
+@@ -61,7 +62,6 @@ typedef struct _HifTransactionPrivate	Hi
+ struct _HifTransactionPrivate
+ {
+ 	HifDb			*db;
+-	rpmKeyring		 keyring;
+ 	rpmts			 ts;
+ 	HifContext		*context;
+ 	GPtrArray		*sources;
+@@ -96,8 +96,7 @@ hif_transaction_finalize (GObject *objec
+ 	g_ptr_array_unref (priv->pkgs_to_download);
+ 	g_object_unref (priv->context);
+ 	g_timer_destroy (priv->timer);
+-	rpmKeyringFree (priv->keyring);
+-	rpmtsFree (priv->ts);
++	priv->ts = rpmtsFree (priv->ts);
+ 
+ 	if (priv->db != NULL)
+ 		g_object_unref (priv->db);
+@@ -121,7 +120,6 @@ hif_transaction_init (HifTransaction *tr
+ {
+ 	HifTransactionPrivate *priv = GET_PRIVATE (transaction);
+ 	priv->ts = rpmtsCreate ();
+-	priv->keyring = rpmtsGetKeyring (priv->ts, 1);
+ 	priv->timer = g_timer_new ();
+ 	priv->pkgs_to_download = g_ptr_array_new_with_free_func ((GDestroyNotify) hy_package_free);
+ }
+@@ -371,7 +369,7 @@ hif_transaction_check_untrusted (HifTran
+ 		}
+ 
+ 		/* check file */
+-		ret = hif_keyring_check_untrusted_file (priv->keyring,
++		ret = hif_keyring_check_untrusted_file (
+ 							filename,
+ 							error);
+ 		if (!ret)
+@@ -439,15 +437,6 @@ hif_transaction_rpmcb_type_to_string (co
+ 	case RPMCALLBACK_SCRIPT_ERROR:
+ 		type = "script-error";
+ 		break;
+-	case RPMCALLBACK_SCRIPT_START:
+-		type = "script-start";
+-		break;
+-	case RPMCALLBACK_SCRIPT_STOP:
+-		type = "script-stop";
+-		break;
+-	case RPMCALLBACK_INST_STOP:
+-		type = "install-stop";
+-		break;
+ 	}
+ 	return type;
+ }
+@@ -735,7 +724,6 @@ hif_transaction_ts_progress_cb (const vo
+ 		/* don't do anything */
+ 		break;
+ 
+-	case RPMCALLBACK_INST_STOP:
+ 	case RPMCALLBACK_UNINST_STOP:
+ 
+ 		/* phase complete */
+@@ -749,8 +737,6 @@ hif_transaction_ts_progress_cb (const vo
+ 	case RPMCALLBACK_UNPACK_ERROR:
+ 	case RPMCALLBACK_CPIO_ERROR:
+ 	case RPMCALLBACK_SCRIPT_ERROR:
+-	case RPMCALLBACK_SCRIPT_START:
+-	case RPMCALLBACK_SCRIPT_STOP:
+ 	case RPMCALLBACK_UNKNOWN:
+ 	case RPMCALLBACK_REPACKAGE_PROGRESS:
+ 	case RPMCALLBACK_REPACKAGE_START:
+@@ -1292,15 +1278,7 @@ hif_transaction_commit (HifTransaction *
+ 
+ 	/* setup the transaction */
+ 	tmp = hif_context_get_install_root (priv->context);
+-	rc = rpmtsSetRootDir (priv->ts, tmp);
+-	if (rc < 0) {
+-		ret = FALSE;
+-		g_set_error_literal (error,
+-				     HIF_ERROR,
+-				     HIF_ERROR_INTERNAL_ERROR,
+-				     "failed to set root");
+-		goto out;
+-	}
++	rpmtsSetRootDir (priv->ts, tmp);
+ 	rpmtsSetNotifyCallback (priv->ts,
+ 				hif_transaction_ts_progress_cb,
+ 				transaction);
+--- libhif-0.1.0/libhif/hif-rpmts.c.orig	2014-06-04 10:15:54.000000000 +0200
++++ libhif-0.1.0/libhif/hif-rpmts.c	2014-06-15 08:10:12.430475514 +0200
+@@ -35,9 +35,12 @@
+ #endif
+ 
+ #include <glib.h>
+-#include <rpm/rpmlib.h>
++#define _RPMLOG_INTERNAL
++#include <rpm/rpm46compat.h>
++#include <rpm/pkgio.h>
+ #include <rpm/rpmlog.h>
+ #include <rpm/rpmdb.h>
++#include <rpm/rpmio.h>
+ 
+ #include "hif-cleanup.h"
+ #include "hif-rpmts.h"
+@@ -230,10 +233,17 @@ hif_rpmts_get_problem_str (rpmProblem pr
+ 				       diskspace,
+ 				       generic_str);
+ 		break;
+-	case RPMPROB_OBSOLETES:
+-		str = g_strdup_printf ("package %s is obsoleted by %s",
+-				       pkg_nevr,
+-				       pkg_nevr_alt);
++	case RPMPROB_RDONLY:
++		str = g_strdup_printf ("tried to install package on read-only filesystem");
++		break;
++	case RPMPROB_BADPRETRANS:
++		str = g_strdup_printf ("bad %%pretrans?"); // unimplemented acc. to rpmps.h
++		break;
++	case RPMPROB_BADPLATFORM:
++		str = g_strdup_printf ("package %s is for a different platform", pkg_nevr);
++		break;
++	case RPMPROB_NOREPACKAGE:
++		str = g_strdup_printf ("re-packaged package %s is missing", pkg_nevr);
+ 		break;
+ 	}
+ 	return str;
+@@ -297,7 +307,7 @@ hif_rpmts_look_for_problems (rpmts ts, G
+ 			     HIF_ERROR_INTERNAL_ERROR,
+ 			     "Error running transaction and no problems were reported!");
+ out:
+-	rpmpsFree (probs);
++	probs = rpmpsFree (probs);
+ 	return ret;
+ }
+ 
+@@ -310,11 +320,11 @@ hif_rpmts_log_handler_cb (rpmlogRec rec,
+ 	GString **string = (GString **) data;
+ 
+ 	/* only log errors */
+-	if (rpmlogRecPriority (rec) != RPMLOG_ERR)
++	if (rec->pri != RPMLOG_ERR)
+ 		return RPMLOG_DEFAULT;
+ 
+ 	/* do not log internal BDB errors */
+-	if (g_strstr_len (rpmlogRecMessage (rec), -1, "BDB") != NULL)
++	if (g_strstr_len (rec->message, -1, "BDB") != NULL)
+ 		return 0;
+ 
+ 	/* create string if required */
+@@ -324,7 +334,7 @@ hif_rpmts_log_handler_cb (rpmlogRec rec,
+ 	/* if text already exists, join them */
+ 	if ((*string)->len > 0)
+ 		g_string_append (*string, ": ");
+-	g_string_append (*string, rpmlogRecMessage (rec));
++	g_string_append (*string, rec->message);
+ 
+ 	/* remove the trailing /n which rpm does */
+ 	if ((*string)->len > 0)
+@@ -373,7 +383,7 @@ hif_rpmts_find_package (rpmts ts, HyPack
+ 	}
+ 
+ 	/* success */
+-	headerLink (hdr);
++	hdr = headerLink (hdr);
+ out:
+ 	rpmlogSetCallback (NULL, NULL);
+ 	if (iter != NULL)
+@@ -419,6 +429,6 @@ hif_rpmts_add_remove_pkg (rpmts ts, HyPa
+ 	}
+ out:
+ 	if (hdr != NULL)
+-		headerFree (hdr);
++		hdr = headerFree (hdr);
+ 	return ret;
+ }
+--- libhif-0.1.0/libhif/rpmorg-compat.h.orig	1970-01-01 01:00:00.000000000 +0100
++++ libhif-0.1.0/libhif/rpmorg-compat.h	2014-06-15 07:52:06.750498144 +0200
+@@ -0,0 +1,64 @@
++#ifndef RPMORG_COMPAT_H
++#define RPMORG_COMPAT_H
++
++#include <rpm/rpm46compat.h>
++
++#define _RPMVSF_NOSIGNATURES (RPMVSF_NODSAHEADER | RPMVSF_NORSAHEADER | RPMVSF_NODSA | RPMVSF_NORSA)
++#define	_RPMVSF_NODIGESTS (RPMVSF_NOSHA1HEADER | RPMVSF_NOMD5HEADER | RPMVSF_NOSHA1 | RPMVSF_NOMD5)
++
++static inline const char * headerGetString(Header h, int32_t tag)
++{
++    const char *res = NULL;
++    struct rpmtd_s td;
++
++    if (headerGet(h, tag, &td, HEADERGET_MINMEM)) {
++	if (rpmtdCount(&td) == 1) {
++	    res = rpmtdGetString(&td);
++	}
++	rpmtdFreeData(&td);
++    }
++    return res;
++}
++
++static inline uint64_t rpmtdGetNumber(rpmtd td)
++{
++    uint64_t val = 0;
++    int ix;
++    assert(td != NULL);
++    ix = (td->ix >= 0 ? td->ix : 0);
++
++    switch (td->type) {
++    case RPM_INT64_TYPE:
++	val = *((uint64_t *) td->data + ix);
++	break;
++    case RPM_INT32_TYPE:
++	val = *((uint32_t *) td->data + ix);
++	break;
++    case RPM_INT16_TYPE:
++	val = *((uint16_t *) td->data + ix);
++	break;
++    case RPM_INT8_TYPE:
++    case RPM_CHAR_TYPE:
++	val = *((uint8_t *) td->data + ix);
++	break;
++    default:
++	break;
++    }
++    return val;
++}
++
++static inline uint64_t headerGetNumber(Header h, int32_t tag)
++{
++    uint64_t res = 0;
++    struct rpmtd_s td;
++
++    if (headerGet(h, tag, &td, HEADERGET_EXT)) {
++	if (rpmtdCount(&td) == 1) {
++	    res = rpmtdGetNumber(&td);
++	}
++	rpmtdFreeData(&td);
++    }
++    return res;
++}
++
++#endif /* RPMORG_COMPAT_H */
================================================================

---- gitweb:

http://git.pld-linux.org/gitweb.cgi/packages/libhif.git/commitdiff/fc7c04832d134b3ccbfb84ab4ce3f9c59fadee83



More information about the pld-cvs-commit mailing list