diff options
author | ticktock35 <ticktock35@e8e0d7a0-c8d9-11dd-a880-a1081c7ac358> | 2008-12-15 00:31:22 (EST) |
---|---|---|
committer | ticktock35 <ticktock35@e8e0d7a0-c8d9-11dd-a880-a1081c7ac358> | 2008-12-15 00:31:22 (EST) |
commit | fe09abec099fb3ab0e8c21f6ba90de8ecc6a016e (patch) | |
tree | e20477c61ae9fff9bb38a3870342cfdd2577b7f8 /libopkg/opkg_upgrade.c | |
parent | 5795b0541bbdb1ac596c969ec106c5323d0404f7 (diff) |
adding list_upgradable
opkg: refactory the upgradable list
git-svn-id: http://opkg.googlecode.com/svn/trunk@164 e8e0d7a0-c8d9-11dd-a880-a1081c7ac358
Diffstat (limited to 'libopkg/opkg_upgrade.c')
-rw-r--r-- | libopkg/opkg_upgrade.c | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/libopkg/opkg_upgrade.c b/libopkg/opkg_upgrade.c index 925d9d8..d014979 100644 --- a/libopkg/opkg_upgrade.c +++ b/libopkg/opkg_upgrade.c @@ -77,3 +77,35 @@ int opkg_upgrade_pkg(opkg_conf_t *conf, pkg_t *old) new->state_flag |= SF_USER; return opkg_install_pkg(conf, new,1); } + + + +pkg_vec_t *opkg_upgrade_all_list_get(opkg_conf_t *conf) { + pkg_vec_t *all, *ans; + int i; + + /* ensure all data is valid */ + pkg_info_preinstall_check (conf); + + all = pkg_vec_alloc (); + ans = pkg_vec_alloc (); + pkg_hash_fetch_all_installed (&conf->pkg_hash, all); + for (i = 0; i < all->len; i++) + { + pkg_t *old, *new; + int cmp; + + old = all->pkgs[i]; + new = pkg_hash_fetch_best_installation_candidate_by_name(conf, old->name, NULL); + + if (new == NULL) + continue; + + cmp = pkg_compare_versions(old, new); + + if ( cmp < 0 ) + pkg_vec_insert(ans, old); + } + pkg_vec_free (all); + return ans; +} |