Git-Url: 
http://git.frugalware.org/gitweb/gitweb.cgi?p=pacman-g2.git;a=commitdiff;h=6ad97dbdd3b12bb9472e13a6c39887c6a9f3bddf

commit 6ad97dbdd3b12bb9472e13a6c39887c6a9f3bddf
Author: Michel Hermier <[email protected]>
Date:   Tue Jun 3 12:49:47 2014 +0200

libpacman: Make __pmdepmissing_t an object and vectorize depmissing list 
addition to _pacman_depmisslist_add.

diff --git a/lib/libpacman/conflict.cpp b/lib/libpacman/conflict.cpp
index e30c439..d9d4fa0 100644
--- a/lib/libpacman/conflict.cpp
+++ b/lib/libpacman/conflict.cpp
@@ -97,12 +97,8 @@ pmlist_t *_pacman_checkconflicts(pmtrans_t *trans, pmlist_t 
*packages)
/* conflict */
_pacman_log(PM_LOG_DEBUG, _("targs vs db: found %s as a conflict for %s"),
dp->name(), tp->name());
-                                       miss = _pacman_depmiss_new(tp->name(), 
PM_DEP_TYPE_CONFLICT, PM_DEP_MOD_ANY, dp->name(), NULL);
-                                       if(!_pacman_depmiss_isin(miss, 
baddeps)) {
-                                               baddeps = 
_pacman_list_add(baddeps, miss);
-                                       } else {
-                                               FREE(miss);
-                                       }
+                                       miss = new __pmdepmissing_t(tp->name(), 
PM_DEP_TYPE_CONFLICT, PM_DEP_MOD_ANY, dp->name(), NULL);
+                                       baddeps = 
_pacman_depmisslist_add(baddeps, miss);
} else {
/* see if dp provides something in tp's conflict list */
pmlist_t *m;
@@ -111,12 +107,8 @@ pmlist_t *_pacman_checkconflicts(pmtrans_t *trans, 
pmlist_t *packages)
/* confict */
_pacman_log(PM_LOG_DEBUG, _("targs vs db: found %s as a conflict for %s"),
dp->name(), tp->name());
-                                                       miss = 
_pacman_depmiss_new(tp->name(), PM_DEP_TYPE_CONFLICT, PM_DEP_MOD_ANY, 
dp->name(), NULL);
-                                                       
if(!_pacman_depmiss_isin(miss, baddeps)) {
-                                                               baddeps = 
_pacman_list_add(baddeps, miss);
-                                                       } else {
-                                                               FREE(miss);
-                                                       }
+                                                       miss = new 
__pmdepmissing_t(tp->name(), PM_DEP_TYPE_CONFLICT, PM_DEP_MOD_ANY, dp->name(), 
NULL);
+                                                       baddeps = 
_pacman_depmisslist_add(baddeps, miss);
}
}
}
@@ -133,12 +125,8 @@ pmlist_t *_pacman_checkconflicts(pmtrans_t *trans, 
pmlist_t *packages)
/* otp is listed in tp's conflict list */
_pacman_log(PM_LOG_DEBUG, _("targs vs targs: found %s as a conflict for %s"),
otp->name(), tp->name());
-                                       miss = _pacman_depmiss_new(tp->name(), 
PM_DEP_TYPE_CONFLICT, PM_DEP_MOD_ANY, otp->name(), NULL);
-                                       if(!_pacman_depmiss_isin(miss, 
baddeps)) {
-                                               baddeps = 
_pacman_list_add(baddeps, miss);
-                                       } else {
-                                               FREE(miss);
-                                       }
+                                       miss = new __pmdepmissing_t(tp->name(), 
PM_DEP_TYPE_CONFLICT, PM_DEP_MOD_ANY, otp->name(), NULL);
+                                       baddeps = 
_pacman_depmisslist_add(baddeps, miss);
} else {
/* see if otp provides something in tp's conflict list */
pmlist_t *m;
@@ -146,12 +134,8 @@ pmlist_t *_pacman_checkconflicts(pmtrans_t *trans, 
pmlist_t *packages)
if(!strcmp(m->data, j->data)) {
_pacman_log(PM_LOG_DEBUG, _("targs vs targs: found %s as a conflict for %s"),
otp->name(), tp->name());
-                                                       miss = 
_pacman_depmiss_new(tp->name(), PM_DEP_TYPE_CONFLICT, PM_DEP_MOD_ANY, 
otp->name(), NULL);
-                                                       
if(!_pacman_depmiss_isin(miss, baddeps)) {
-                                                               baddeps = 
_pacman_list_add(baddeps, miss);
-                                                       } else {
-                                                               FREE(miss);
-                                                       }
+                                                       miss = new 
__pmdepmissing_t(tp->name(), PM_DEP_TYPE_CONFLICT, PM_DEP_MOD_ANY, otp->name(), 
NULL);
+                                                       baddeps = 
_pacman_depmisslist_add(baddeps, miss);
}
}
}
@@ -187,12 +171,8 @@ pmlist_t *_pacman_checkconflicts(pmtrans_t *trans, 
pmlist_t *packages)
if(!strcmp((char *)j->data, tp->name())) {
_pacman_log(PM_LOG_DEBUG, _("db vs targs: found %s as a conflict for %s"),
info->name(), tp->name());
-                                       miss = _pacman_depmiss_new(tp->name(), 
PM_DEP_TYPE_CONFLICT, PM_DEP_MOD_ANY, info->name(), NULL);
-                                       if(!_pacman_depmiss_isin(miss, 
baddeps)) {
-                                               baddeps = 
_pacman_list_add(baddeps, miss);
-                                       } else {
-                                               FREE(miss);
-                                       }
+                                       miss = new __pmdepmissing_t(tp->name(), 
PM_DEP_TYPE_CONFLICT, PM_DEP_MOD_ANY, info->name(), NULL);
+                                       baddeps = 
_pacman_depmisslist_add(baddeps, miss);
} else {
/* see if the db package conflicts with something we provide */
pmlist_t *m;
@@ -202,12 +182,8 @@ pmlist_t *_pacman_checkconflicts(pmtrans_t *trans, 
pmlist_t *packages)
if(!strcmp(m->data, n->data)) {
_pacman_log(PM_LOG_DEBUG, _("db vs targs: found %s as a conflict for %s"),
info->name(), tp->name());
-                                                               miss = 
_pacman_depmiss_new(tp->name(), PM_DEP_TYPE_CONFLICT, PM_DEP_MOD_ANY, 
info->name(), NULL);
-                                                               
if(!_pacman_depmiss_isin(miss, baddeps)) {
-                                                                       baddeps 
= _pacman_list_add(baddeps, miss);
-                                                               } else {
-                                                                       
FREE(miss);
-                                                               }
+                                                               miss = new 
__pmdepmissing_t(tp->name(), PM_DEP_TYPE_CONFLICT, PM_DEP_MOD_ANY, 
info->name(), NULL);
+                                                               baddeps = 
_pacman_depmisslist_add(baddeps, miss);
}
}
}
diff --git a/lib/libpacman/deps.cpp b/lib/libpacman/deps.cpp
index 1ccd160..340af82 100644
--- a/lib/libpacman/deps.cpp
+++ b/lib/libpacman/deps.cpp
@@ -61,26 +61,18 @@ static void _pacman_graph_free(void *data)
free(graph);
}

-pmdepmissing_t *_pacman_depmiss_new(const char *target, unsigned char type, 
unsigned char depmod,
-                                  const char *depname, const char *depversion)
+__pmdepmissing_t::__pmdepmissing_t(const char *target, unsigned char type, 
unsigned char depmod,
+               const char *depname, const char *depversion)
{
-       pmdepmissing_t *miss = _pacman_malloc(sizeof(pmdepmissing_t));
-
-       if(miss == NULL) {
-               return(NULL);
-       }
-
-       STRNCPY(miss->target, target, PKG_NAME_LEN);
-       miss->type = type;
-       miss->depend.mod = depmod;
-       STRNCPY(miss->depend.name, depname, PKG_NAME_LEN);
+       STRNCPY(this->target, target, PKG_NAME_LEN);
+       this->type = type;
+       depend.mod = depmod;
+       STRNCPY(depend.name, depname, PKG_NAME_LEN);
if(depversion) {
-               STRNCPY(miss->depend.version, depversion, PKG_VERSION_LEN);
+               STRNCPY(depend.version, depversion, PKG_VERSION_LEN);
} else {
-               miss->depend.version[0] = 0;
+               depend.version[0] = 0;
}
-
-       return(miss);
}

int _pacman_depmiss_isin(pmdepmissing_t *needle, pmlist_t *haystack)
@@ -94,10 +86,19 @@ int _pacman_depmiss_isin(pmdepmissing_t *needle, pmlist_t 
*haystack)
return(1);
}
}
-
return(0);
}

+pmlist_t *_pacman_depmisslist_add(pmlist_t *misslist, pmdepmissing_t *miss)
+{
+       if(!_pacman_depmiss_isin(miss, misslist)) {
+               misslist = _pacman_list_add(misslist, miss);
+       } else {
+               delete miss;
+       }
+       return misslist;
+}
+
/* Re-order a list of target packages with respect to their dependencies.
*
* Example (PM_TRANS_TYPE_ADD):
@@ -254,13 +255,9 @@ pmlist_t *_pacman_checkdeps(pmtrans_t *trans, unsigned 
char op, pmlist_t *packag
if(_pacman_depcmp(oldpkg, &depend) && !_pacman_depcmp(tp, &depend)) {
_pacman_log(PM_LOG_DEBUG, _("checkdeps: updated '%s' won't satisfy a dependency 
of '%s'"),
oldpkg->name(), p->name());
-                                               miss = 
_pacman_depmiss_new(p->name(), PM_DEP_TYPE_DEPEND, depend.mod,
+                                               miss = new 
__pmdepmissing_t(p->name(), PM_DEP_TYPE_DEPEND, depend.mod,
depend.name, depend.version);
-                                               if(!_pacman_depmiss_isin(miss, 
baddeps)) {
-                                                       baddeps = 
_pacman_list_add(baddeps, miss);
-                                               } else {
-                                                       FREE(miss);
-                                               }
+                                               baddeps = 
_pacman_depmisslist_add(baddeps, miss);
}
}
}
@@ -391,12 +388,8 @@ pmlist_t *_pacman_checkdeps(pmtrans_t *trans, unsigned 
char op, pmlist_t *packag
if(!found) {
_pacman_log(PM_LOG_DEBUG, _("checkdeps: found %s as a dependency for %s"),
depend.name, tp->name());
-                                       miss = _pacman_depmiss_new(tp->name(), 
PM_DEP_TYPE_DEPEND, depend.mod, depend.name, depend.version);
-                                       if(!_pacman_depmiss_isin(miss, 
baddeps)) {
-                                               baddeps = 
_pacman_list_add(baddeps, miss);
-                                       } else {
-                                               FREE(miss);
-                                       }
+                                       miss = new __pmdepmissing_t(tp->name(), 
PM_DEP_TYPE_DEPEND, depend.mod, depend.name, depend.version);
+                                       baddeps = 
_pacman_depmisslist_add(baddeps, miss);
}
}
}
@@ -428,12 +421,8 @@ pmlist_t *_pacman_checkdeps(pmtrans_t *trans, unsigned 
char op, pmlist_t *packag
}
if(!found) {
_pacman_log(PM_LOG_DEBUG, _("checkdeps: found %s which requires %s"), (char 
*)j->data, tp->name());
-                                               miss = 
_pacman_depmiss_new(tp->name(), PM_DEP_TYPE_REQUIRED, PM_DEP_MOD_ANY, j->data, 
NULL);
-                                               if(!_pacman_depmiss_isin(miss, 
baddeps)) {
-                                                       baddeps = 
_pacman_list_add(baddeps, miss);
-                                               } else {
-                                                       FREE(miss);
-                                               }
+                                               miss = new 
__pmdepmissing_t(tp->name(), PM_DEP_TYPE_REQUIRED, PM_DEP_MOD_ANY, (const char 
*)j->data, NULL);
+                                               baddeps = 
_pacman_depmisslist_add(baddeps, miss);
}
}
}
diff --git a/lib/libpacman/deps.h b/lib/libpacman/deps.h
index c6e0257..9e18f37 100644
--- a/lib/libpacman/deps.h
+++ b/lib/libpacman/deps.h
@@ -33,6 +33,9 @@ typedef struct __pmdepend_t {
} pmdepend_t;

struct __pmdepmissing_t {
+       __pmdepmissing_t(const char *target, unsigned char type, unsigned char 
depmod,
+                       const char *depname, const char *depversion);
+
char target[PKG_NAME_LEN];
unsigned char type;
pmdepend_t depend;
@@ -46,9 +49,9 @@ typedef struct __pmgraph_t {
pmlist_t *childptr; /* points to a child in children list */
} pmgraph_t;

-pmdepmissing_t *_pacman_depmiss_new(const char *target, unsigned char type, 
unsigned char depmod,
-                            const char *depname, const char *depversion);
int _pacman_depmiss_isin(pmdepmissing_t *needle, pmlist_t *haystack);
+pmlist_t *_pacman_depmisslist_add(pmlist_t *misslist, pmdepmissing_t *miss);
+
pmlist_t *_pacman_sortbydeps(pmlist_t *targets, int mode);
pmlist_t *_pacman_checkdeps(pmtrans_t *trans, unsigned char op, pmlist_t 
*packages);
int _pacman_splitdep(char *depstr, pmdepend_t *depend);
_______________________________________________
Frugalware-git mailing list
[email protected]
http://frugalware.org/mailman/listinfo/frugalware-git

Reply via email to