[pacman-dev] [RFC] libalpm: replace deprecated libarchive calls

Dave Reisner dreisner at archlinux.org
Mon Jan 28 13:57:53 EST 2013


This raises our minimum libarchive version to 3.0.0, which is reflected
by autoconf.

Signed-off-by: Dave Reisner <dreisner at archlinux.org>
---
There's a soname bump with libarchive 3.1 (which no one in Arch Linux land has
been brave enough to touch yet). Maybe this will help us get started. The test
suite still passes, though there is a CPIO based failure in libarchive 3.1.1
which should be dealt with separately.

I mark this as an RFC since it's a library requirement bump. As an alternative,
I propose that we could create a header, perhaps lib/libalpm/libarchive.h which
has wrapper methods and preprocessor logic to Do The Right Thing™. Personally, I'd
rather not get into this business.

 configure.ac             |  4 ++--
 lib/libalpm/add.c        |  6 +++---
 lib/libalpm/be_local.c   |  6 +++---
 lib/libalpm/be_package.c | 10 +++++-----
 lib/libalpm/be_sync.c    |  4 ++--
 lib/libalpm/util.c       |  6 +++---
 6 files changed, 18 insertions(+), 18 deletions(-)

diff --git a/configure.ac b/configure.ac
index a7364ba..08af5a3 100644
--- a/configure.ac
+++ b/configure.ac
@@ -190,8 +190,8 @@ AC_CHECK_LIB([m], [fabs], ,
 	AC_MSG_ERROR([libm is needed to compile pacman!]))
 
 # Check for libarchive
-PKG_CHECK_MODULES(LIBARCHIVE, [libarchive >= 2.8.0], ,
-	AC_MSG_ERROR([*** libarchive >= 2.8.0 is needed to compile pacman!]))
+PKG_CHECK_MODULES(LIBARCHIVE, [libarchive >= 3.0.0], ,
+	AC_MSG_ERROR([*** libarchive >= 3.0.0 is needed to compile pacman!]))
 
 # Check for OpenSSL
 have_openssl=no
diff --git a/lib/libalpm/add.c b/lib/libalpm/add.c
index 9b67813..7bdb032 100644
--- a/lib/libalpm/add.c
+++ b/lib/libalpm/add.c
@@ -555,7 +555,7 @@ static int commit_single_pkg(alpm_handle_t *handle, alpm_pkg_t *newpkg,
 		if(chdir(handle->root) != 0) {
 			_alpm_log(handle, ALPM_LOG_ERROR, _("could not change directory to %s (%s)\n"),
 					handle->root, strerror(errno));
-			archive_read_finish(archive);
+			archive_read_close(archive);
 			CLOSE(fd);
 			ret = -1;
 			goto cleanup;
@@ -577,7 +577,7 @@ static int commit_single_pkg(alpm_handle_t *handle, alpm_pkg_t *newpkg,
 				/* Using compressed size for calculations here, as newpkg->isize is not
 				 * exact when it comes to comparing to the ACTUAL uncompressed size
 				 * (missing metadata sizes) */
-				int64_t pos = archive_position_compressed(archive);
+				int64_t pos = archive_filter_bytes(archive, -1);
 				percent = (pos * 100) / newpkg->size;
 				if(percent >= 100) {
 					percent = 100;
@@ -597,7 +597,7 @@ static int commit_single_pkg(alpm_handle_t *handle, alpm_pkg_t *newpkg,
 			/* extract the next file from the archive */
 			errors += extract_single_file(handle, archive, entry, newpkg, oldpkg);
 		}
-		archive_read_finish(archive);
+		archive_read_close(archive);
 		CLOSE(fd);
 
 		/* restore the old cwd if we have it */
diff --git a/lib/libalpm/be_local.c b/lib/libalpm/be_local.c
index 0f60b6d..6c58920 100644
--- a/lib/libalpm/be_local.c
+++ b/lib/libalpm/be_local.c
@@ -241,11 +241,11 @@ static struct archive *_cache_mtree_open(alpm_pkg_t *pkg)
 	archive_read_support_filter_gzip(mtree);
 	archive_read_support_format_mtree(mtree);
 
-	if((r = archive_read_open_file(mtree, mtfile, ALPM_BUFFER_SIZE))) {
+	if((r = archive_read_open_filename(mtree, mtfile, ALPM_BUFFER_SIZE))) {
 		_alpm_log(pkg->handle, ALPM_LOG_ERROR, _("error while reading file %s: %s\n"),
 					mtfile, archive_error_string(mtree));
 		pkg->handle->pm_errno = ALPM_ERR_LIBARCHIVE;
-		archive_read_finish(mtree);
+		archive_read_close(mtree);
 		goto error;
 	}
 
@@ -279,7 +279,7 @@ static int _cache_mtree_next(const alpm_pkg_t UNUSED *pkg,
 static int _cache_mtree_close(const alpm_pkg_t UNUSED *pkg,
 		struct archive *mtree)
 {
-	return archive_read_finish(mtree);
+	return archive_read_close(mtree);
 }
 
 static int _cache_force_load(alpm_pkg_t *pkg)
diff --git a/lib/libalpm/be_package.c b/lib/libalpm/be_package.c
index 18fc14a..d920a76 100644
--- a/lib/libalpm/be_package.c
+++ b/lib/libalpm/be_package.c
@@ -74,7 +74,7 @@ static void *_package_changelog_open(alpm_pkg_t *pkg)
 			changelog = malloc(sizeof(struct package_changelog));
 			if(!changelog) {
 				pkg->handle->pm_errno = ALPM_ERR_MEMORY;
-				archive_read_finish(archive);
+				archive_read_close(archive);
 				CLOSE(fd);
 				return NULL;
 			}
@@ -84,7 +84,7 @@ static void *_package_changelog_open(alpm_pkg_t *pkg)
 		}
 	}
 	/* we didn't find a changelog */
-	archive_read_finish(archive);
+	archive_read_close(archive);
 	CLOSE(fd);
 	errno = ENOENT;
 
@@ -124,7 +124,7 @@ static int _package_changelog_close(const alpm_pkg_t UNUSED *pkg, void *fp)
 {
 	int ret;
 	struct package_changelog *changelog = fp;
-	ret = archive_read_finish(changelog->archive);
+	ret = archive_read_close(changelog->archive);
 	CLOSE(changelog->fd);
 	free(changelog);
 	return ret;
@@ -471,7 +471,7 @@ alpm_pkg_t *_alpm_pkg_load_internal(alpm_handle_t *handle,
 		goto pkg_invalid;
 	}
 
-	archive_read_finish(archive);
+	archive_read_close(archive);
 	CLOSE(fd);
 
 	/* internal fields for package struct */
@@ -503,7 +503,7 @@ pkg_invalid:
 	handle->pm_errno = ALPM_ERR_PKG_INVALID;
 error:
 	_alpm_pkg_free(newpkg);
-	archive_read_finish(archive);
+	archive_read_close(archive);
 	if(fd >= 0) {
 		CLOSE(fd);
 	}
diff --git a/lib/libalpm/be_sync.c b/lib/libalpm/be_sync.c
index a5a2c10..77bfc1e 100644
--- a/lib/libalpm/be_sync.c
+++ b/lib/libalpm/be_sync.c
@@ -383,7 +383,7 @@ static size_t estimate_package_count(struct stat *st, struct archive *archive)
 {
 	int per_package;
 
-	switch(archive_compression(archive)) {
+	switch(archive_filter_code(archive, 0)) {
 		case ARCHIVE_COMPRESSION_NONE:
 			per_package = 3015;
 			break;
@@ -471,7 +471,7 @@ static int sync_db_populate(alpm_db_t *db)
 			count, db->treename);
 
 cleanup:
-	archive_read_finish(archive);
+	archive_read_close(archive);
 	if(fd >= 0) {
 		CLOSE(fd);
 	}
diff --git a/lib/libalpm/util.c b/lib/libalpm/util.c
index 5960be6..f2258d6 100644
--- a/lib/libalpm/util.c
+++ b/lib/libalpm/util.c
@@ -240,7 +240,7 @@ int _alpm_open_archive(alpm_handle_t *handle, const char *path,
 		RET_ERR(handle, ALPM_ERR_LIBARCHIVE, -1);
 	}
 
-	archive_read_support_compression_all(*archive);
+	archive_read_support_filter_all(*archive);
 	archive_read_support_format_all(*archive);
 
 	_alpm_log(handle, ALPM_LOG_DEBUG, "opening archive %s\n", path);
@@ -271,7 +271,7 @@ int _alpm_open_archive(alpm_handle_t *handle, const char *path,
 	return fd;
 
 error:
-	archive_read_finish(*archive);
+	archive_read_close(*archive);
 	*archive = NULL;
 	if(fd >= 0) {
 		CLOSE(fd);
@@ -392,7 +392,7 @@ int _alpm_unpack(alpm_handle_t *handle, const char *path, const char *prefix,
 
 cleanup:
 	umask(oldmask);
-	archive_read_finish(archive);
+	archive_read_close(archive);
 	CLOSE(fd);
 	if(cwdfd >= 0) {
 		if(fchdir(cwdfd) != 0) {
-- 
1.8.1.1



More information about the pacman-dev mailing list