Git-Url: http://git.frugalware.org/gitweb/gitweb.cgi?p=pacman-g2.git;a=commitdiff;h=09169e02d56ad863a530a6926237c33c9489ef5d
commit 09169e02d56ad863a530a6926237c33c9489ef5d Author: Michel Hermier <[email protected]> Date: Sun Apr 7 09:31:26 2013 +0200 libpacman: Create helper function to get a pmtranspkg_t proper name, and provide some cmp/detect function accordingly. diff --git a/lib/libpacman/sync.c b/lib/libpacman/sync.c index c41ea1f..ccbb1f2 100644 --- a/lib/libpacman/sync.c +++ b/lib/libpacman/sync.c @@ -172,13 +172,6 @@ error: return -1; } -/* Helper functions for _pacman_list_remove - */ -static int ptr_cmp(const void *s1, const void *s2) -{ - return(strcmp(((pmsyncpkg_t *)s1)->pkg_new->name, ((pmsyncpkg_t *)s2)->pkg_new->name)); -} - static int pkg_cmp(const void *p1, const void *p2) { return(strcmp(((pmpkg_t *)p1)->name, ((pmsyncpkg_t *)p2)->pkg_new->name)); @@ -394,7 +387,7 @@ int _pacman_sync_prepare(pmtrans_t *trans, pmlist_t **data) pmsyncpkg_t *rsync = __pacman_trans_get_trans_pkg(trans, rmpkg); pmsyncpkg_t *spkg = NULL; _pacman_log(PM_LOG_FLOW2, _("removing '%s' from target list"), rmpkg); - trans->packages = _pacman_list_remove(trans->packages, rsync, ptr_cmp, (void **)&spkg); + trans->packages = _pacman_list_remove(trans->packages, rsync, __pacman_transpkg_cmp, (void **)&spkg); __pacman_trans_pkg_delete (spkg); spkg = NULL; continue; @@ -432,7 +425,7 @@ int _pacman_sync_prepare(pmtrans_t *trans, pmlist_t **data) /* remove it from the target list */ pmsyncpkg_t *spkg = NULL; _pacman_log(PM_LOG_FLOW2, _("removing '%s' from target list"), miss->depend.name); - trans->packages = _pacman_list_remove(trans->packages, rsync, ptr_cmp, (void **)&spkg); + trans->packages = _pacman_list_remove(trans->packages, rsync, __pacman_transpkg_cmp, (void **)&spkg); __pacman_trans_pkg_delete (spkg); spkg = NULL; } diff --git a/lib/libpacman/trans.c b/lib/libpacman/trans.c index 629e6e8..fe599e7 100644 --- a/lib/libpacman/trans.c +++ b/lib/libpacman/trans.c @@ -74,6 +74,26 @@ void __pacman_trans_pkg_delete(pmsyncpkg_t *trans_pkg) free(trans_pkg); } +const char *__pacman_transpkg_name (pmsyncpkg_t *transpkg) { + if (transpkg != NULL) { + if (transpkg->pkg_new != NULL) { + return transpkg->pkg_new->name; + } + if (transpkg->pkg_local != NULL) { + return transpkg->pkg_local->name; + } + } + return NULL; +} + +int __pacman_transpkg_cmp (pmtranspkg_t *transpkg1, pmtranspkg_t *transpkg2) { + return __pacman_transpkg_detect_name (transpkg1, __pacman_transpkg_name (transpkg2)); +} + +int __pacman_transpkg_detect_name (pmtranspkg_t *transpkg, const char *package) { + return strcmp (__pacman_transpkg_name (transpkg), package); +} + static int check_oldcache(pmtrans_t *trans) { @@ -99,16 +119,18 @@ pmsyncpkg_t *__pacman_trans_get_trans_pkg(pmtrans_t *trans, const char *package) /* Sanity checks */ ASSERT(trans != NULL, RET_ERR(PM_ERR_TRANS_NULL, NULL)); +#if 1 for(i = trans->packages; i != NULL ; i = i->next) { syncpkg = i->data; - if(syncpkg && ( - (syncpkg->pkg_new && strcmp(syncpkg->pkg_new->name, package) == 0) || - (syncpkg->pkg_local && strcmp(syncpkg->pkg_local->name, package) == 0))) { + if(syncpkg && __pacman_transpkg_detect_name (syncpkg, package) == 0) { return(syncpkg); } } return(NULL); +#else + return f_list_detect (trans->packages, (FDetectFunc)__pacman_transpkg_detect_name, package); +#endif } static @@ -235,7 +257,7 @@ error: int _pacman_trans_addtarget(pmtrans_t *trans, const char *target, pmtranstype_t type, unsigned int flags) { char *pkg_name; - pmsyncpkg_t *trans_pkg = __pacman_trans_pkg_new(type, NULL); + pmtranspkg_t *trans_pkg = __pacman_trans_pkg_new(type, NULL); pmdb_t *db_local; /* Sanity checks */ @@ -342,6 +364,7 @@ int _pacman_trans_addtarget(pmtrans_t *trans, const char *target, pmtranstype_t if (trans_pkg->flags & PM_TRANS_FLAG_EXPLICIT) { trans_pkg->pkg_new->reason = PM_PKG_REASON_EXPLICIT; } + trans->_packages = _pacman_list_add(trans->_packages, trans_pkg->pkg_new); goto out; } @@ -350,24 +373,23 @@ int _pacman_trans_addtarget(pmtrans_t *trans, const char *target, pmtranstype_t RET_ERR(PM_ERR_TRANS_DUP_TARGET, -1); } - if((trans_pkg->pkg_new = _pacman_db_scan(db_local, pkg_name, INFRQ_ALL)) == NULL) { + if((trans_pkg->pkg_local = _pacman_db_scan(db_local, pkg_name, INFRQ_ALL)) == NULL) { _pacman_log(PM_LOG_ERROR, _("could not find %s in database"), pkg_name); RET_ERR(PM_ERR_PKG_NOT_FOUND, -1); } /* ignore holdpkgs on upgrade */ - if((trans == handle->trans) && _pacman_strlist_find(handle->holdpkg, trans_pkg->pkg_new->name)) { + if((trans == handle->trans) && _pacman_strlist_find(handle->holdpkg, __pacman_transpkg_name(trans_pkg))) { int resp = 0; QUESTION(trans, PM_TRANS_CONV_REMOVE_HOLDPKG, trans_pkg->pkg_new, NULL, NULL, &resp); if(!resp) { RET_ERR(PM_ERR_PKG_HOLD, -1); } } - + trans->_packages = _pacman_list_add(trans->_packages, trans_pkg->pkg_local); } out: - _pacman_log(PM_LOG_FLOW2, _("adding %s in the targets list"), trans_pkg->pkg_new->name); - trans->_packages = _pacman_list_add(trans->_packages, trans_pkg->pkg_new); + _pacman_log(PM_LOG_FLOW2, _("adding %s in the targets list"), __pacman_transpkg_name(trans_pkg)); trans->packages = _pacman_list_add(trans->packages, trans_pkg); } diff --git a/lib/libpacman/trans.h b/lib/libpacman/trans.h index 8ce84f0..187163c 100644 --- a/lib/libpacman/trans.h +++ b/lib/libpacman/trans.h @@ -25,6 +25,7 @@ #define _PACMAN_TRANS_H typedef struct __pmtrans_t pmtrans_t; +typedef struct __pmsyncpkg_t pmtranspkg_t; #include "handle.h" @@ -120,6 +121,10 @@ typedef struct __pmsyncpkg_t { pmsyncpkg_t *__pacman_trans_pkg_new (int type, pmpkg_t *spkg); void __pacman_trans_pkg_delete (pmsyncpkg_t *pkg); +const char *__pacman_transpkg_name (pmtranspkg_t *transpkg); +int __pacman_transpkg_cmp (pmtranspkg_t *transpkg1, pmtranspkg_t *transpkg2); +int __pacman_transpkg_detect_name (pmtranspkg_t *transpkg, const char *package); + /* Implementation details */ int __pacman_trans_init(pmtrans_t *trans, pmtranstype_t type, unsigned int flags, pmtrans_cbs_t cbs); /* void __pacman_trans_fini(pmtrans_t *trans); */ _______________________________________________ Frugalware-git mailing list [email protected] http://frugalware.org/mailman/listinfo/frugalware-git
