Git-Url: http://git.frugalware.org/gitweb/gitweb.cgi?p=pacman-g2.git;a=commitdiff;h=ec5baf573564a043ef1d5a2e63ab375c2f13cc53
commit ec5baf573564a043ef1d5a2e63ab375c2f13cc53 Author: Michel Hermier <herm...@frugalware.org> Date: Sat Nov 9 17:50:17 2013 +0100 libpacman: Vectorise archive opening in _pacman_archive_read_open_all_file function. diff --git a/lib/libpacman/add.c b/lib/libpacman/add.c index 2921b7c..d061c72 100644 --- a/lib/libpacman/add.c +++ b/lib/libpacman/add.c @@ -356,13 +356,7 @@ int _pacman_add_commit(pmtrans_t *trans, pmlist_t **data) _pacman_log(PM_LOG_FLOW1, _("extracting files")); /* Extract the package */ - if ((archive = archive_read_new ()) == NULL) - RET_ERR(PM_ERR_LIBARCHIVE_ERROR, -1); - - archive_read_support_compression_all (archive); - archive_read_support_format_all (archive); - - if (archive_read_open_file (archive, pkg_new->data, PM_DEFAULT_BYTES_PER_BLOCK) != ARCHIVE_OK) { + if((archive = _pacman_archive_read_open_all_file(pkg_new->data)) == NULL) { RET_ERR(PM_ERR_PKG_OPEN, -1); } diff --git a/lib/libpacman/db/syncdb.c b/lib/libpacman/db/syncdb.c index 75060ac..86bb2ac 100644 --- a/lib/libpacman/db/syncdb.c +++ b/lib/libpacman/db/syncdb.c @@ -72,21 +72,16 @@ pmlist_t *_pacman_syncdb_test(pmdb_t *db) static int _pacman_syncdb_open(pmdb_t *db) { + struct stat buf; char dbpath[PATH_MAX]; + snprintf(dbpath, PATH_MAX, "%s" PM_EXT_DB, db->path); - struct stat buf; if(stat(dbpath, &buf) != 0) { // db is not there, we'll open it later db->handle = NULL; return 0; } - if((db->handle = archive_read_new()) == NULL) { - RET_ERR(PM_ERR_DB_OPEN, -1); - } - archive_read_support_compression_all(db->handle); - archive_read_support_format_all(db->handle); - if(archive_read_open_filename(db->handle, dbpath, PM_DEFAULT_BYTES_PER_BLOCK) != ARCHIVE_OK) { - archive_read_finish(db->handle); + if((db->handle = _pacman_archive_read_open_all_file(dbpath)) == NULL) { RET_ERR(PM_ERR_DB_OPEN, -1); } return 0; @@ -105,19 +100,8 @@ int _pacman_syncdb_close(pmdb_t *db) static int _pacman_syncdb_rewind(pmdb_t *db) { - char dbpath[PATH_MAX]; - - snprintf(dbpath, PATH_MAX, "%s" PM_EXT_DB, db->path); - if (db->handle) - archive_read_finish(db->handle); - db->handle = archive_read_new(); - archive_read_support_compression_all(db->handle); - archive_read_support_format_all(db->handle); - if (archive_read_open_filename(db->handle, dbpath, PM_DEFAULT_BYTES_PER_BLOCK) != ARCHIVE_OK) { - archive_read_finish(db->handle); - db->handle = NULL; - } - return 0; + _pacman_syncdb_close(db); + return _pacman_syncdb_open(db); } static diff --git a/lib/libpacman/io/archive.c b/lib/libpacman/io/archive.c index 491286f..1d45913 100644 --- a/lib/libpacman/io/archive.c +++ b/lib/libpacman/io/archive.c @@ -31,6 +31,25 @@ #include "util.h" +struct archive *_pacman_archive_read_open_all_file(const char *file) +{ + struct archive *archive; + + ASSERT(!_pacman_strempty(file), RET_ERR(PM_ERR_WRONG_ARGS, NULL)); + + if((archive = archive_read_new ()) == NULL) + RET_ERR(PM_ERR_LIBARCHIVE_ERROR, NULL); + + archive_read_support_compression_all (archive); + archive_read_support_format_all (archive); + + if(archive_read_open_file(archive, file, PM_DEFAULT_BYTES_PER_BLOCK) != ARCHIVE_OK) { + archive_read_finish(archive); + RET_ERR(PM_ERR_PKG_OPEN, NULL); + } + return archive; +} + static const cookie_io_functions_t _pacman_archive_io_functions = { diff --git a/lib/libpacman/io/archive.h b/lib/libpacman/io/archive.h index c2fcd9f..6f7a1ea 100644 --- a/lib/libpacman/io/archive.h +++ b/lib/libpacman/io/archive.h @@ -23,6 +23,7 @@ #include <archive.h> +struct archive *_pacman_archive_read_open_all_file(const char *file); FILE *_pacman_archive_read_fropen(struct archive *a); #endif /* _PACMAN_UTIL_H */ diff --git a/lib/libpacman/package.c b/lib/libpacman/package.c index 1a20f43..36bd827 100644 --- a/lib/libpacman/package.c +++ b/lib/libpacman/package.c @@ -201,19 +201,9 @@ pmpkg_t *_pacman_pkg_load(const char *pkgfile) struct archive_entry *entry; pmpkg_t *info = NULL; - if(_pacman_strempty(pkgfile)) { - RET_ERR(PM_ERR_WRONG_ARGS, NULL); - } - - if ((archive = archive_read_new ()) == NULL) - RET_ERR(PM_ERR_LIBARCHIVE_ERROR, NULL); - - archive_read_support_compression_all (archive); - archive_read_support_format_all (archive); - - if ((ret = archive_read_open_file (archive, pkgfile, PM_DEFAULT_BYTES_PER_BLOCK)) != ARCHIVE_OK) + if((archive = _pacman_archive_read_open_all_file(pkgfile)) == NULL) { RET_ERR(PM_ERR_PKG_OPEN, NULL); - + } info = _pacman_pkg_new(NULL, NULL); if(info == NULL) { archive_read_finish (archive); diff --git a/lib/libpacman/util.c b/lib/libpacman/util.c index a2a2d5b..70a2609 100644 --- a/lib/libpacman/util.c +++ b/lib/libpacman/util.c @@ -319,15 +319,9 @@ int _pacman_unpack(const char *archive, const char *prefix, const char *fn) closedir(handle); /* now extract the new entries */ - if ((_archive = archive_read_new ()) == NULL) - RET_ERR(PM_ERR_LIBARCHIVE_ERROR, -1); - - archive_read_support_compression_all(_archive); - archive_read_support_format_all (_archive); - - if (archive_read_open_file (_archive, archive, PM_DEFAULT_BYTES_PER_BLOCK) != ARCHIVE_OK) + if((_archive = _pacman_archive_read_open_all_file(archive)) == NULL) { RET_ERR(PM_ERR_PKG_OPEN, -1); - + } while (archive_read_next_header (_archive, &entry) == ARCHIVE_OK) { if (fn && strcmp (fn, archive_entry_pathname (entry))) { if (archive_read_data_skip (_archive) != ARCHIVE_OK) _______________________________________________ Frugalware-git mailing list Frugalware-git@frugalware.org http://frugalware.org/mailman/listinfo/frugalware-git