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

Reply via email to