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

Reply via email to