using list_head to handle the list
[project/opkg-lede.git] / libopkg / opkg_cmd.c
index 56649ea6dfd4808a36dccf484a1b9dabd5cc334f..518493e9034fffbcff7954af5d3387d5805495a4 100644 (file)
@@ -217,10 +217,10 @@ static int opkg_update_cmd(opkg_conf_t *conf, int argc, char **argv)
      }
 
 
-     for (iter = conf->pkg_src_list.head; iter; iter = iter->next) {
+     for (iter = void_list_first(&conf->pkg_src_list); iter; iter = void_list_next(&conf->pkg_src_list, iter)) {
          char *url, *list_file_name;
 
-         src = iter->data;
+         src = (pkg_src_t *)iter->data;
 
          if (src->extra_data)  /* debian style? */
              sprintf_alloc(&url, "%s/%s/%s", src->value, src->extra_data, 
@@ -711,6 +711,7 @@ static int opkg_list_cmd(opkg_conf_t *conf, int argc, char **argv)
      }
      available = pkg_vec_alloc();
      pkg_hash_fetch_available(&conf->pkg_hash, available);
+     pkg_vec_sort(available, pkg_compare_names);
      for (i=0; i < available->len; i++) {
          pkg = available->pkgs[i];
          /* if we have package name or pattern and pkg does not match, then skip it */
@@ -756,6 +757,7 @@ static int opkg_list_installed_cmd(opkg_conf_t *conf, int argc, char **argv)
      }
      available = pkg_vec_alloc();
      pkg_hash_fetch_all_installed(&conf->pkg_hash, available);
+     pkg_vec_sort(available, pkg_compare_names);
      for (i=0; i < available->len; i++) {
          pkg = available->pkgs[i];
          /* if we have package name or pattern and pkg does not match, then skip it */
@@ -786,12 +788,12 @@ static int opkg_list_installed_cmd(opkg_conf_t *conf, int argc, char **argv)
 
 static int opkg_list_upgradable_cmd(opkg_conf_t *conf, int argc, char **argv) 
 {
-    pkg_vec_t *all = opkg_upgrade_all_list_get(conf);
+    struct active_list *head = prepare_upgrade_list(conf);
+    struct active_list *node=NULL;
     pkg_t *_old_pkg, *_new_pkg;
     char *old_v, *new_v;
-    int i;
-    for (i=0;i<all->len;i++) {
-        _old_pkg = all->pkgs[i];
+    for (node = active_list_next(head, head); node;node = active_list_next(head,node)) {
+        _old_pkg = list_entry(node, pkg_t, list);
         _new_pkg = pkg_hash_fetch_best_installation_candidate_by_name(conf, _old_pkg->name, NULL);
         old_v = pkg_version_str_alloc(_old_pkg);
         new_v = pkg_version_str_alloc(_new_pkg);
@@ -800,7 +802,7 @@ static int opkg_list_upgradable_cmd(opkg_conf_t *conf, int argc, char **argv)
         free(old_v);
         free(new_v);
     }
-    pkg_vec_free(all);
+    active_list_head_delete(head);
     return 0;
 }
 
@@ -847,8 +849,8 @@ static int opkg_info_status_cmd(opkg_conf_t *conf, int argc, char **argv, int in
           }
          if (conf->verbosity > 1) {
               conffile_list_elt_t *iter;
-              for (iter = pkg->conffiles.head; iter; iter = iter->next) {
-                   conffile_t *cf = iter->data;
+              for (iter = nv_pair_list_first(&pkg->conffiles); iter; iter = nv_pair_list_next(&pkg->conffiles, iter)) {
+                   conffile_t *cf = (conffile_t *)iter->data;
                    int modified = conffile_has_been_modified(conf, cf);
                    opkg_message(conf, OPKG_NOTICE, "conffile=%s md5sum=%s modified=%d\n",
                                 cf->name, cf->value, modified);
@@ -1138,7 +1140,7 @@ static int opkg_files_cmd(opkg_conf_t *conf, int argc, char **argv)
               buff = realloc (buff, buff_len);
               goto try_again;
          }
-         for (iter = installed_files->head; iter; iter = iter->next) {
+         for (iter = str_list_first(installed_files); iter; iter = str_list_next(installed_files, iter)) {
               used_len += strlen (iter->data) + 1;
               while (buff_len <= used_len) {
                    buff_len *= 2;
@@ -1438,14 +1440,15 @@ static int opkg_search_cmd(opkg_conf_t *conf, int argc, char **argv)
  
      installed = pkg_vec_alloc();
      pkg_hash_fetch_all_installed(&conf->pkg_hash, installed);
+     pkg_vec_sort(installed, pkg_compare_names);
 
      for (i=0; i < installed->len; i++) {
          pkg = installed->pkgs[i];
 
          installed_files = pkg_get_installed_files(pkg);
 
-         for (iter = installed_files->head; iter; iter = iter->next) {
-              installed_file = iter->data;
+         for (iter = str_list_first(installed_files); iter; iter = str_list_next(installed_files, iter)) {
+              installed_file = (char *)iter->data;
               if (fnmatch(argv[0], installed_file, 0)==0)  {
                        if (opkg_cb_list) opkg_cb_list(pkg->name, 
                                                       installed_file, 
@@ -1457,9 +1460,6 @@ static int opkg_search_cmd(opkg_conf_t *conf, int argc, char **argv)
          pkg_free_installed_files(pkg);
      }
 
-     /* XXX: CLEANUP: It's not obvious from the name of
-       pkg_hash_fetch_all_installed that we need to call
-       pkg_vec_free to avoid a memory leak. */
      pkg_vec_free(installed);
 
      return 0;
@@ -1491,11 +1491,9 @@ static int opkg_print_architecture_cmd(opkg_conf_t *conf, int argc, char **argv)
 {
      nv_pair_list_elt_t *l;
 
-     l = conf->arch_list.head;
-     while (l) {
-         nv_pair_t *nv = l->data;
+     list_for_each_entry(l, &conf->arch_list.head, node) {
+         nv_pair_t *nv = (nv_pair_t *)l->data;
          printf("arch %s %s\n", nv->name, nv->value);
-         l = l->next;
      }
      return 0;
 }