[pacman-dev] [PATCH] Fix documentation of alpm_mtree_next and remove libarchive exposure

Allan McRae allan at archlinux.org
Tue Nov 26 01:43:51 UTC 2019


The documentation of the return types of alpm_mtree_next was incorrect.
This extended into the relevant function in be_local.c.

Also, return explicit integer values, rather than the ARCHIVE_xxx values,
to avoid unnecessarily exposing frontends to libarchive internals (even
though it makes no functional difference).

Original-work-by: morganamilo <morganamilo at archlinux.org>
Signed-off-by: Allan McRae <allan at archlinux.org>
---

Reviewing morganamilo documentation patch lead me further into the rabbit
hole...

 lib/libalpm/alpm.h     |  2 +-
 lib/libalpm/be_local.c | 18 ++++++++++++++++--
 src/pacman/check.c     |  2 +-
 3 files changed, 18 insertions(+), 4 deletions(-)

diff --git a/lib/libalpm/alpm.h b/lib/libalpm/alpm.h
index c200a5d8..956284bd 100644
--- a/lib/libalpm/alpm.h
+++ b/lib/libalpm/alpm.h
@@ -1329,7 +1329,7 @@ struct archive *alpm_pkg_mtree_open(alpm_pkg_t *pkg);
  * @param pkg the package that the mtree file is being read from
  * @param archive the archive structure reading from the mtree file
  * @param entry an archive_entry to store the entry header information
- * @return 0 if end of archive is reached, non-zero otherwise.
+ * @return 0 on success, 1 if end of archive is reached, -1 otherwise.
  */
 int alpm_pkg_mtree_next(const alpm_pkg_t *pkg, struct archive *archive,
 		struct archive_entry **entry);
diff --git a/lib/libalpm/be_local.c b/lib/libalpm/be_local.c
index 5d4a7508..b89acf05 100644
--- a/lib/libalpm/be_local.c
+++ b/lib/libalpm/be_local.c
@@ -284,12 +284,26 @@ error:
  * @param pkg the package that the mtree file is being read from
  * @param archive the archive structure reading from the mtree file
  * @param entry an archive_entry to store the entry header information
- * @return 0 if end of archive is reached, non-zero otherwise.
+ * @return 0 on success, 1 if end of archive is reached, -1 otherwise.
  */
 static int _cache_mtree_next(const alpm_pkg_t UNUSED *pkg,
 		struct archive *mtree, struct archive_entry **entry)
 {
-	return archive_read_next_header(mtree, entry);
+	int ret;
+	ret = archive_read_next_header(mtree, entry);
+
+	switch(ret) {
+		case ARCHIVE_OK:
+			return 0;
+			break;
+		case ARCHIVE_EOF:
+			return 1;
+			break;
+		default:
+			break;
+	}
+
+	return -1;
 }
 
 /**
diff --git a/src/pacman/check.c b/src/pacman/check.c
index ab35891a..85b25f39 100644
--- a/src/pacman/check.c
+++ b/src/pacman/check.c
@@ -277,7 +277,7 @@ int check_pkg_full(alpm_pkg_t *pkg)
 		return 0;
 	}
 
-	while(alpm_pkg_mtree_next(pkg, mtree, &entry) == ARCHIVE_OK) {
+	while(alpm_pkg_mtree_next(pkg, mtree, &entry) == 0) {
 		struct stat st;
 		const char *path = archive_entry_pathname(entry);
 		char filepath[PATH_MAX];
-- 
2.24.0


More information about the pacman-dev mailing list