Git-Url: 
http://git.frugalware.org/gitweb/gitweb.cgi?p=pacman-g2.git;a=commitdiff;h=93e1316349766178ffc641d88c44b6944fd72347

commit 93e1316349766178ffc641d88c44b6944fd72347
Author: Michel Hermier <[email protected]>
Date:   Sat Nov 9 23:35:16 2013 +0100

libpacman: Split out _pacman_localdb_readpkg and _pacman_syncdb_readpkg of 
_pacman_db_readpkg.

diff --git a/lib/libpacman/be_files.c b/lib/libpacman/be_files.c
index 6a2814c..1b6995d 100644
--- a/lib/libpacman/be_files.c
+++ b/lib/libpacman/be_files.c
@@ -60,19 +60,17 @@ static inline int islocal(pmdb_t *db)
return strcmp(db->treename, "local") == 0;
}

-pmpkg_t *_pacman_db_readpkg(pmdb_t *db, unsigned int inforeq)
+pmpkg_t *_pacman_localdb_readpkg(pmdb_t *db, unsigned int inforeq)
{
struct dirent *ent = NULL;
struct stat sbuf;
char path[PATH_MAX];
pmpkg_t *pkg;
-       struct archive_entry *entry = NULL;
int isdir = 0;

ASSERT(db != NULL, RET_ERR(PM_ERR_DB_NULL, NULL));

while(!isdir) {
-               if (islocal(db)) {
ent = readdir(db->handle);
if(ent == NULL) {
return(NULL);
@@ -86,7 +84,36 @@ pmpkg_t *_pacman_db_readpkg(pmdb_t *db, unsigned int inforeq)
if(!stat(path, &sbuf) && S_ISDIR(sbuf.st_mode)) {
isdir = 1;
}
-               } else {
+       }
+
+       pkg = _pacman_pkg_new(NULL, NULL);
+       if(pkg == NULL) {
+               return(NULL);
+       }
+       char *dname;
+               dname = strdup(ent->d_name);
+       if(_pacman_pkg_splitname(dname, pkg->name, pkg->version, 0) == -1) {
+               _pacman_log(PM_LOG_ERROR, _("invalid name for dabatase entry 
'%s'"), dname);
+               FREE(dname);
+               return(NULL);
+       }
+       FREE(dname);
+       if(_pacman_db_read(db, inforeq, pkg) == -1) {
+               FREEPKG(pkg);
+       }
+
+       return(pkg);
+}
+
+pmpkg_t *_pacman_syncdb_readpkg(pmdb_t *db, unsigned int inforeq)
+{
+       pmpkg_t *pkg;
+       struct archive_entry *entry = NULL;
+       int isdir = 0;
+
+       ASSERT(db != NULL, RET_ERR(PM_ERR_DB_NULL, NULL));
+
+       while(!isdir) {
if (!db->handle)
_pacman_db_rewind(db);
if (!db->handle || archive_read_next_header(db->handle, &entry) != ARCHIVE_OK) {
@@ -96,7 +123,6 @@ pmpkg_t *_pacman_db_readpkg(pmdb_t *db, unsigned int inforeq)
const char *pathname = archive_entry_pathname(entry);
if (pathname[strlen(pathname)-1] == '/')
isdir = 1;
-               }
}

pkg = _pacman_pkg_new(NULL, NULL);
@@ -104,12 +130,8 @@ pmpkg_t *_pacman_db_readpkg(pmdb_t *db, unsigned int 
inforeq)
return(NULL);
}
char *dname;
-       if (islocal(db)) {
-               dname = strdup(ent->d_name);
-       } else {
dname = strdup(archive_entry_pathname(entry));
dname[strlen(dname)-1] = '\0'; // drop trailing slash
-       }
if(_pacman_pkg_splitname(dname, pkg->name, pkg->version, 0) == -1) {
_pacman_log(PM_LOG_ERROR, _("invalid name for dabatase entry '%s'"), dname);
FREE(dname);
@@ -123,6 +145,17 @@ pmpkg_t *_pacman_db_readpkg(pmdb_t *db, unsigned int 
inforeq)
return(pkg);
}

+pmpkg_t *_pacman_db_readpkg(pmdb_t *db, unsigned int inforeq)
+{
+       ASSERT(db != NULL, RET_ERR(PM_ERR_DB_NULL, NULL));
+
+       if(islocal(db)) {
+               return _pacman_localdb_readpkg(db, inforeq);
+       } else {
+               return _pacman_syncdb_readpkg(db, inforeq);
+       }
+}
+
pmpkg_t *_pacman_db_scan(pmdb_t *db, const char *target, unsigned int inforeq)
{
struct dirent *ent = NULL;
_______________________________________________
Frugalware-git mailing list
[email protected]
http://frugalware.org/mailman/listinfo/frugalware-git

Reply via email to