summaryrefslogtreecommitdiffstats
path: root/libopkg
diff options
context:
space:
mode:
authorticktock35 <ticktock35@e8e0d7a0-c8d9-11dd-a880-a1081c7ac358>2008-12-15 00:14:04 (EST)
committer ticktock35 <ticktock35@e8e0d7a0-c8d9-11dd-a880-a1081c7ac358>2008-12-15 00:14:04 (EST)
commit871744d4c3437d0de1294343b0fe4202f2111def (patch)
tree2e43de4b2ab98838b6b60e7ffce114197fc00359 /libopkg
parent6af0e9c6eb022eb4372fa65070287e31f4873699 (diff)
opkg: implement opkg_list_upgradable_packages function
git-svn-id: http://opkg.googlecode.com/svn/trunk@95 e8e0d7a0-c8d9-11dd-a880-a1081c7ac358
Diffstat (limited to 'libopkg')
-rw-r--r--libopkg/opkg.c52
-rw-r--r--libopkg/opkg.h3
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);