X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=libopkg%2Fpkg_vec.c;h=9e4f26b812d09251d1b60cd8564caec72261a835;hb=f502667e06364b16c7d06dcdf0df3d21e61140dd;hp=7d42a29fd477df6408304f5e55ca34e53a13114c;hpb=f7eccd4bb54039f94312a56b40599d7cb446951e;p=oweals%2Fopkg-lede.git diff --git a/libopkg/pkg_vec.c b/libopkg/pkg_vec.c index 7d42a29..9e4f26b 100644 --- a/libopkg/pkg_vec.c +++ b/libopkg/pkg_vec.c @@ -20,14 +20,11 @@ #include "xregex.h" #include "pkg.h" #include "opkg_message.h" +#include "libbb/libbb.h" pkg_vec_t * pkg_vec_alloc(void) { - pkg_vec_t * vec = (pkg_vec_t *)malloc(sizeof(pkg_vec_t)); - if (!vec) { - fprintf(stderr, "%s: out of memory\n", __FUNCTION__); - return NULL; - } + pkg_vec_t * vec = xcalloc(1, sizeof(pkg_vec_t)); vec->pkgs = NULL; vec->len = 0; @@ -73,12 +70,9 @@ pkg_t *pkg_vec_insert_merge(pkg_vec_t *vec, pkg_t *pkg, int set_status,opkg_conf /* we didn't find one, add it */ if (!found){ - opkg_message(conf, OPKG_DEBUG2, "Function: %s. Adding new pkg=%s version=%s arch=%s\n", + opkg_message(conf, OPKG_DEBUG2, "Function: %s. Adding new pkg=%s version=%s arch=%s\n", __FUNCTION__, pkg->name, pkg->version, pkg->architecture); - - vec->pkgs = (pkg_t **)realloc(vec->pkgs, (vec->len + 1) * sizeof(pkg_t *)); - vec->pkgs[vec->len] = pkg; - vec->len++; + pkg_vec_insert(vec, pkg); return pkg; } /* update the one that we have */ @@ -106,25 +100,9 @@ pkg_t *pkg_vec_insert_merge(pkg_vec_t *vec, pkg_t *pkg, int set_status,opkg_conf void pkg_vec_insert(pkg_vec_t *vec, const pkg_t *pkg) { - int found = 0; - -#if 0 - /* look for a duplicate pkg by name, version, and architecture */ - for (i = 0; i < vec->len; i++) - if ((strcmp(pkg->name, vec->pkgs[i]->name) == 0) - && (pkg_compare_versions(pkg, vec->pkgs[i]) == 0) - && (strcmp(pkg->architecture, vec->pkgs[i]->name) == 0)) { - found = 1; - break; - } -#endif - - /* we didn't find one, add it */ - if(!found){ - vec->pkgs = (pkg_t **)realloc(vec->pkgs, (vec->len + 1) * sizeof(pkg_t *)); - *(const pkg_t **)&vec->pkgs[vec->len] = pkg; - vec->len++; - } + vec->pkgs = xrealloc(vec->pkgs, (vec->len + 1) * sizeof(pkg_t *)); + vec->pkgs[vec->len] = (pkg_t *)pkg; + vec->len++; } int pkg_vec_contains(pkg_vec_t *vec, pkg_t *apkg) @@ -172,11 +150,7 @@ int pkg_vec_mark_if_matches(pkg_vec_t *vec, const char *pattern) abstract_pkg_vec_t * abstract_pkg_vec_alloc(void) { abstract_pkg_vec_t * vec ; - vec = (abstract_pkg_vec_t *)malloc(sizeof(abstract_pkg_vec_t)); - if (!vec) { - fprintf(stderr, "%s: out of memory\n", __FUNCTION__); - return NULL; - } + vec = xcalloc(1, sizeof(abstract_pkg_vec_t)); vec->pkgs = NULL; vec->len = 0; @@ -196,24 +170,9 @@ void abstract_pkg_vec_free(abstract_pkg_vec_t *vec) */ void abstract_pkg_vec_insert(abstract_pkg_vec_t *vec, abstract_pkg_t *pkg) { - -#if 0 - /* look for a duplicate pkg by name */ - for(i = 0; i < vec->len; i++) - if (strcmp(pkg->name, vec->pkgs[i]->name) == 0) - break; - - /* we didn't find one, add it */ - if(i == vec->len){ -#endif - vec->pkgs = - (abstract_pkg_t **) - realloc(vec->pkgs, (vec->len + 1) * sizeof(abstract_pkg_t *)); - vec->pkgs[vec->len] = pkg; - vec->len++; -#if 0 - } -#endif + vec->pkgs = xrealloc(vec->pkgs, (vec->len + 1) * sizeof(abstract_pkg_t *)); + vec->pkgs[vec->len] = pkg; + vec->len++; } abstract_pkg_t * abstract_pkg_vec_get(abstract_pkg_vec_t *vec, int i) @@ -238,3 +197,14 @@ void abstract_pkg_vec_sort(pkg_vec_t *vec, compare_fcn_t compar) qsort(vec->pkgs, vec->len, sizeof(pkg_t *), compar); } +int pkg_compare_names(const void *p1, const void *p2) +{ + const pkg_t *pkg1 = *(const pkg_t **)p1; + const pkg_t *pkg2 = *(const pkg_t **)p2; + if (pkg1->name == NULL) + return 1; + if (pkg2->name == NULL) + return -1; + return(strcmp(pkg1->name, pkg2->name)); +} +