Git-Url: http://git.frugalware.org/gitweb/gitweb.cgi?p=pacman-g2.git;a=commitdiff;h=4165beecee59ba8a7ca4af1aa2a9faff331a51bc
commit 4165beecee59ba8a7ca4af1aa2a9faff331a51bc Author: Michel Hermier <[email protected]> Date: Mon Apr 28 18:59:27 2014 +0200 libpacman: Reduce a little the Package init/fini calls. diff --git a/lib/libpacman/db/localdb.cpp b/lib/libpacman/db/localdb.cpp index 3a156ed..aa5b439 100644 --- a/lib/libpacman/db/localdb.cpp +++ b/lib/libpacman/db/localdb.cpp @@ -118,15 +118,6 @@ LocalDatabase::~LocalDatabase() } static -int _pacman_localpkg_init(Package *pkg, Database *db) -{ - ASSERT(pkg != NULL, RET_ERR(PM_ERR_PKG_INVALID, -1)); - ASSERT(_pacman_pkg_init(pkg, db) == 0, return -1); - - return 0; -} - -static Package *_pacman_localdb_pkg_new(Database *db, const struct dirent *dirent, unsigned int inforeq) { Package *pkg; @@ -136,8 +127,7 @@ Package *_pacman_localdb_pkg_new(Database *db, const struct dirent *dirent, unsi ASSERT(dirent != NULL, return NULL); dname = dirent->d_name; - if((pkg = _pacman_pkg_new_from_filename(dname, 0)) == NULL || - _pacman_localpkg_init(pkg, db) != 0 || + if((pkg = _pacman_pkg_new_from_filename(dname, 0, db)) == NULL || db->read(pkg, inforeq) == -1) { _pacman_log(PM_LOG_ERROR, _("invalid name for dabatase entry '%s'"), dname); FREEPKG(pkg); diff --git a/lib/libpacman/db/syncdb.cpp b/lib/libpacman/db/syncdb.cpp index b72f307..aeb0a70 100644 --- a/lib/libpacman/db/syncdb.cpp +++ b/lib/libpacman/db/syncdb.cpp @@ -109,15 +109,6 @@ int SyncPackage::read(unsigned int flags) return 0; } -static -int _pacman_syncpkg_init(Package *pkg, Database *db) -{ - ASSERT(pkg != NULL, RET_ERR(PM_ERR_PKG_INVALID, -1)); - ASSERT(_pacman_pkg_init(pkg, db) == 0, return -1); - - return 0; -} - SyncDatabase::SyncDatabase(pmhandle_t *handle, const char *treename) : Database(handle, treename, &_pacman_syncdb_ops) { @@ -137,8 +128,7 @@ Package *_pacman_syncdb_pkg_new(Database *db, const struct archive_entry *entry, ASSERT(entry != NULL, return NULL); dname = archive_entry_pathname((struct archive_entry *)entry); - if((pkg = _pacman_pkg_new_from_filename(dname, 0)) == NULL || - _pacman_syncpkg_init(pkg, db) != 0 || + if((pkg = _pacman_pkg_new_from_filename(dname, 0, db)) == NULL || db->read(pkg, inforeq) == -1) { _pacman_log(PM_LOG_ERROR, _("invalid name for dabatase entry '%s'"), dname); FREEPKG(pkg); diff --git a/lib/libpacman/package.cpp b/lib/libpacman/package.cpp index d881f82..23dd130 100644 --- a/lib/libpacman/package.cpp +++ b/lib/libpacman/package.cpp @@ -48,11 +48,13 @@ using namespace libpacman; -Package::Package() +Package::Package(Database *_database) + : database(_database), reason(PM_PKG_REASON_EXPLICIT) { } Package::Package(const char *name, const char *version) + : reason(PM_PKG_REASON_EXPLICIT) { if(!_pacman_strempty(name)) { STRNCPY(this->name, name, PKG_NAME_LEN); @@ -103,6 +105,21 @@ Package::Package(const libpacman::Package &other) Package::~Package() { + FREELIST(license); + FREELIST(desc_localized); + FREELIST(files); + FREELIST(backup); + FREELIST(depends); + FREELIST(removes); + FREELIST(conflicts); + FREELIST(requiredby); + FREELIST(groups); + FREELIST(provides); + FREELIST(replaces); + FREELIST(triggers); + if(origin == PKG_FROM_FILE) { + FREE(data); + } } libpacman::Package *Package::dup() const @@ -163,14 +180,14 @@ unsigned int _pacman_pkg_parm_to_flag(unsigned char parm) } */ -Package *_pacman_pkg_new_from_filename(const char *filename, int witharch) +Package *_pacman_pkg_new_from_filename(const char *filename, int witharch, Database *database) { Package *pkg; - ASSERT(pkg = new Package(NULL, NULL), return NULL); + ASSERT(pkg = new Package(database), return NULL); if(_pacman_pkg_splitname(filename, pkg->name, pkg->version, witharch) == -1) { - _pacman_pkg_delete(pkg); + delete pkg; pkg = NULL; } return pkg; @@ -178,19 +195,7 @@ Package *_pacman_pkg_new_from_filename(const char *filename, int witharch) int _pacman_pkg_delete(Package *self) { - ASSERT(_pacman_pkg_fini(self) == 0, RET_ERR(PM_ERR_WRONG_ARGS, -1)); - - free(self); - return 0; -} - -int _pacman_pkg_init(Package *self, Database *db) -{ - ASSERT(self != NULL, RET_ERR(PM_ERR_WRONG_ARGS, -1)); - ASSERT(db != NULL, RET_ERR(PM_ERR_DB_NULL, -1)); - - self->database = db; - self->reason = PM_PKG_REASON_EXPLICIT; + delete self; return 0; } diff --git a/lib/libpacman/package.h b/lib/libpacman/package.h index 1a14d94..1927121 100644 --- a/lib/libpacman/package.h +++ b/lib/libpacman/package.h @@ -91,7 +91,7 @@ class Package : public libpacman::Object { public: - Package(); + Package(libpacman::Database *database = 0); Package(const char *name, const char *version); Package(const libpacman::Package &other); virtual ~Package(); @@ -152,11 +152,10 @@ do { \ #define FREELISTPKGS(p) _FREELIST(p, _pacman_pkg_delete) -libpacman::Package *_pacman_pkg_new_from_filename(const char *filename, int witharch); +libpacman::Package *_pacman_pkg_new_from_filename(const char *filename, int witharch, libpacman::Database *database = 0); int _pacman_pkg_delete(libpacman::Package *self); int _pacman_pkg_init(libpacman::Package *self, libpacman::Database *db); -int _pacman_pkg_fini(libpacman::Package *self); int _pacman_pkg_cmp(const void *p1, const void *p2); int _pacman_pkg_is_valid(const libpacman::Package *pkg, const pmtrans_t *trans, const char *pkgfile); _______________________________________________ Frugalware-git mailing list [email protected] http://frugalware.org/mailman/listinfo/frugalware-git
