X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=libopkg%2Fpkg_vec.c;h=472962c9f88cd5237b909aa75d46545f37afbf7c;hb=bef8b3ced498de337792a579af8f5536dae801b3;hp=4f66c02e03efa826a4d9c4e65f17263263f3cb4d;hpb=5c709efb3d63562930b181a342a1bc258bccee83;p=oweals%2Fopkg-lede.git diff --git a/libopkg/pkg_vec.c b/libopkg/pkg_vec.c index 4f66c02..472962c 100644 --- a/libopkg/pkg_vec.c +++ b/libopkg/pkg_vec.c @@ -1,7 +1,7 @@ /* pkg_vec.c - the opkg package management system Steven M. Ayer - + Copyright (C) 2002 Compaq Computer Corporation This program is free software; you can redistribute it and/or @@ -56,12 +56,16 @@ void pkg_vec_insert_merge(pkg_vec_t *vec, pkg_t *pkg, int set_status) /* look for a duplicate pkg by name, version, and architecture */ for (i = 0; i < vec->len; i++){ opkg_msg(DEBUG2, "%s %s arch=%s vs. %s %s arch=%s.\n", - pkg->name, pkg->version, pkg->architecture, + pkg->name, pkg->version, pkg->architecture, vec->pkgs[i]->name, vec->pkgs[i]->version, vec->pkgs[i]->architecture); - if ((strcmp(pkg->name, vec->pkgs[i]->name) == 0) - && (pkg_compare_versions(pkg, vec->pkgs[i]) == 0) - && (strcmp(pkg->architecture, vec->pkgs[i]->architecture) == 0)) { + /* if the name,ver,arch matches, or the name matches and the + * package is marked deinstall/hold */ + if ((!strcmp(pkg->name, vec->pkgs[i]->name)) + && ((pkg->state_want == SW_DEINSTALL + && (pkg->state_flag & SF_HOLD)) + || ((pkg_compare_versions(pkg, vec->pkgs[i]) == 0) + && (!strcmp(pkg->architecture, vec->pkgs[i]->architecture))))) { found = 1; opkg_msg(DEBUG2, "Duplicate for pkg=%s version=%s arch=%s.\n", pkg->name, pkg->version, pkg->architecture); @@ -70,7 +74,7 @@ void pkg_vec_insert_merge(pkg_vec_t *vec, pkg_t *pkg, int set_status) } /* we didn't find one, add it */ - if (!found){ + if (!found){ opkg_msg(DEBUG2, "Adding new pkg=%s version=%s arch=%s.\n", pkg->name, pkg->version, pkg->architecture); pkg_vec_insert(vec, pkg); @@ -143,7 +147,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 ; + abstract_pkg_vec_t * vec ; vec = xcalloc(1, sizeof(abstract_pkg_vec_t)); vec->pkgs = NULL; vec->len = 0; @@ -171,7 +175,7 @@ void abstract_pkg_vec_insert(abstract_pkg_vec_t *vec, abstract_pkg_t *pkg) abstract_pkg_t * abstract_pkg_vec_get(abstract_pkg_vec_t *vec, int i) { - if (vec->len > i) + if (vec->len > i) return vec->pkgs[i]; else return NULL;