diff options
Diffstat (limited to 'libopkg')
-rw-r--r-- | libopkg/opkg.c | 52 | ||||
-rw-r--r-- | libopkg/opkg.h | 3 |
2 files changed, 53 insertions, 2 deletions
diff --git a/libopkg/opkg.c b/libopkg/opkg.c index b94ad55..209db6a 100644 --- a/libopkg/opkg.c +++ b/libopkg/opkg.c @@ -194,7 +194,7 @@ opkg_free (opkg_t *opkg) } int -opkg_read_config_files (opkg_t *opkg) +opkg_re_read_config_files (opkg_t *opkg) { args_t *a; opkg_conf_t *c; @@ -734,3 +734,53 @@ opkg_list_packages (opkg_t *opkg, opkg_package_callback_t callback, void *user_d return 0; } +int +opkg_list_upgradable_packages (opkg_t *opkg, opkg_package_callback_t callback, void *user_data) +{ + pkg_vec_t *all; + int i; + + opkg_assert (opkg); + opkg_assert (callback); + + all = pkg_vec_alloc (); + pkg_hash_fetch_available (&opkg->conf->pkg_hash, all); + for (i = 0; i < all->len; i++) + { + pkg_t *old, *new; + int cmp; + opkg_package_t *package; + + old = all->pkgs[i]; + + if (old->state_status != SS_INSTALLED) + continue; + + new = pkg_hash_fetch_best_installation_candidate_by_name(opkg->conf, old->name); + if (new == NULL) { + /* XXX: Notice: Assuming locally install package is up to date */ + continue; + } + + cmp = pkg_compare_versions(old, new); + + if (cmp < 0) + { + + package = opkg_package_new_with_values ( + old->name, + old->version, + old->architecture, + old->description, + old->tags, + (old->state_status == SS_INSTALLED)); + + callback (opkg, package, user_data); + } + } + + pkg_vec_free (all); + + return 0; +} + diff --git a/libopkg/opkg.h b/libopkg/opkg.h index a6decd5..4dda6c7 100644 --- a/libopkg/opkg.h +++ b/libopkg/opkg.h @@ -41,7 +41,7 @@ opkg_t* opkg_new (); void opkg_free (opkg_t *opkg); void opkg_get_option (opkg_t *opkg, char *option, void **value); void opkg_set_option (opkg_t *opkg, char *option, void *value); -int opkg_read_config_files (opkg_t *opkg); +int opkg_re_read_config_files (opkg_t *opkg); int opkg_install_package (opkg_t *opkg, const char *package_name, opkg_progress_callback_t callback, void *user_data); int opkg_remove_package (opkg_t *opkg, const char *package_name, opkg_progress_callback_t callback, void *user_data); @@ -50,3 +50,4 @@ int opkg_upgrade_all (opkg_t *opkg, opkg_progress_callback_t callback, void *use int opkg_update_package_lists (opkg_t *opkg, opkg_progress_callback_t callback, void *user_data); int opkg_list_packages (opkg_t *opkg, opkg_package_callback_t callback, void *user_data); +int opkg_list_upgradable_packages (opkg_t *opkg, opkg_package_callback_t callback, void *user_data); |