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

Reply via email to