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
