X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=libopkg%2Fpkg_vec.c;h=9e4f26b812d09251d1b60cd8564caec72261a835;hb=51e968e4ddffd4acd7c71e4976e1254a590f2217;hp=436622a11b38f943cdbbea145148ac30169e079c;hpb=3523443344809d2f357a5008931c9f79e91a3de3;p=oweals%2Fopkg-lede.git diff --git a/libopkg/pkg_vec.c b/libopkg/pkg_vec.c index 436622a..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; @@ -36,7 +33,12 @@ pkg_vec_t * pkg_vec_alloc(void) void pkg_vec_free(pkg_vec_t *vec) { - free(vec->pkgs); + if (!vec) + return; + + if (vec->pkgs) + free(vec->pkgs); + free(vec); } @@ -68,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 */ @@ -101,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) @@ -167,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; @@ -180,6 +159,8 @@ abstract_pkg_vec_t * abstract_pkg_vec_alloc(void) void abstract_pkg_vec_free(abstract_pkg_vec_t *vec) { + if (!vec) + return; free(vec->pkgs); free(vec); } @@ -189,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) @@ -231,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)); +} +