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
