Be consistent in how to check return codes for these functions.
[oweals/opkg-lede.git] / libopkg / opkg_cmd.c
index 4d2eb383026c430a978b32e0b22d96a452ed553e..c5ba3f400ec128d877ec22d892997f3d6e47de4c 100644 (file)
@@ -15,6 +15,8 @@
    General Public License for more details.
 */
 
+#include "config.h"
+
 #include <stdio.h>
 #include <dirent.h>
 #include <glob.h>
@@ -388,8 +390,8 @@ opkg_configure_packages(char *pkg_name)
             goto error;
      }
     
-     for(i = 0; i < all->len; i++) {
-         pkg = all->pkgs[i];
+     for(i = 0; i < ordered->len; i++) {
+         pkg = ordered->pkgs[i];
 
          if (pkg_name && fnmatch(pkg_name, pkg->name, 0)) 
               continue;
@@ -403,15 +405,13 @@ opkg_configure_packages(char *pkg_name)
                    pkg->state_flag &= ~SF_PREFER;
                    opkg_state_changed++;
               } else {
-                   if (!err)
-                       err = r;
+                   err = -1;
               }
          }
      }
 
-     r = opkg_finalize_intercepts (ic);
-     if (r && !err)
-        err = r;
+     if (opkg_finalize_intercepts (ic))
+        err = -1;
 
 error:
      pkg_vec_free(all);
@@ -421,12 +421,23 @@ error:
      return err;
 }
 
+static int
+opkg_remove_cmd(int argc, char **argv);
+
 static int
 opkg_install_cmd(int argc, char **argv)
 {
      int i;
      char *arg;
-     int err=0;
+     int err = 0;
+
+     if (conf->force_reinstall) {
+            int saved_force_depends = conf->force_depends;
+            conf->force_depends = 1;
+            (void)opkg_remove_cmd(argc, argv);
+            conf->force_depends = saved_force_depends;
+            conf->force_reinstall = 0;
+     }
 
      signal(SIGINT, sigint_handler);
 
@@ -437,21 +448,21 @@ opkg_install_cmd(int argc, char **argv)
          arg = argv[i];
 
           opkg_msg(DEBUG2, "%s\n", arg);
-          err = opkg_prepare_url_for_install(arg, &argv[i]);
-          if (err)
-              return err;
+          if (opkg_prepare_url_for_install(arg, &argv[i]))
+              return -1;
      }
      pkg_info_preinstall_check();
 
      for (i=0; i < argc; i++) {
          arg = argv[i];
-          err = opkg_install_by_name(arg);
-         if (err) {
+          if (opkg_install_by_name(arg)) {
               opkg_msg(ERROR, "Cannot install package %s.\n", arg);
+              err = -1;
          }
      }
 
-     opkg_configure_packages(NULL);
+     if (opkg_configure_packages(NULL))
+         err = -1;
 
      write_status_files_if_changed();
 
@@ -463,7 +474,7 @@ opkg_upgrade_cmd(int argc, char **argv)
 {
      int i;
      pkg_t *pkg;
-     int err;
+     int err = 0;
 
      signal(SIGINT, sigint_handler);
 
@@ -471,9 +482,8 @@ opkg_upgrade_cmd(int argc, char **argv)
          for (i=0; i < argc; i++) {
               char *arg = argv[i];
 
-               err = opkg_prepare_url_for_install(arg, &arg);
-               if (err)
-                   return err;
+               if (opkg_prepare_url_for_install(arg, &arg))
+                   return -1;
          }
          pkg_info_preinstall_check();
 
@@ -490,10 +500,12 @@ opkg_upgrade_cmd(int argc, char **argv)
               } else {
                    pkg = pkg_hash_fetch_installed_by_name(argv[i]);
               }
-              if (pkg)
-                   opkg_upgrade_pkg(pkg);
-              else {
-                   opkg_install_by_name(arg);
+              if (pkg) {
+                   if (opkg_upgrade_pkg(pkg))
+                           err = -1;
+              } else {
+                   if (opkg_install_by_name(arg))
+                           err = -1;
                }
          }
      } else {
@@ -504,22 +516,24 @@ opkg_upgrade_cmd(int argc, char **argv)
          pkg_hash_fetch_all_installed(installed);
          for (i = 0; i < installed->len; i++) {
               pkg = installed->pkgs[i];
-              opkg_upgrade_pkg(pkg);
+              if (opkg_upgrade_pkg(pkg))
+                      err = -1;
          }
          pkg_vec_free(installed);
      }
 
-     opkg_configure_packages(NULL);
+     if (opkg_configure_packages(NULL))
+         err = -1;
 
      write_status_files_if_changed();
 
-     return 0;
+     return err;
 }
 
 static int
 opkg_download_cmd(int argc, char **argv)
 {
-     int i, err;
+     int i, err = 0;
      char *arg;
      pkg_t *pkg;
 
@@ -533,7 +547,8 @@ opkg_download_cmd(int argc, char **argv)
               continue;
          }
 
-         err = opkg_download_pkg(pkg, ".");
+         if (opkg_download_pkg(pkg, "."))
+                 err = -1;
 
          if (err) {
               opkg_msg(ERROR, "Failed to download %s.\n", pkg->name);
@@ -543,7 +558,7 @@ opkg_download_cmd(int argc, char **argv)
          }
      }
 
-     return 0;
+     return err;
 }
 
 
@@ -696,7 +711,7 @@ opkg_configure_cmd(int argc, char **argv)
 static int
 opkg_remove_cmd(int argc, char **argv)
 {
-     int i, a, done;
+     int i, a, done, err = 0;
      pkg_t *pkg;
      pkg_t *pkg_to_remove;
      pkg_vec_t *available;
@@ -728,12 +743,15 @@ opkg_remove_cmd(int argc, char **argv)
                 opkg_msg(ERROR, "Package %s is not installed.\n", pkg->name);
                 continue;
             }
-            if (pkg->state_status == SS_NOT_INSTALLED) {    // Added the control, so every already removed package could be skipped
+            if (pkg->state_status == SS_NOT_INSTALLED) {
                 opkg_msg(ERROR, "Package %s not installed.\n", pkg->name);
                  continue;
             }
-            opkg_remove_pkg(pkg_to_remove, 0);
-            done = 1;
+
+            if (opkg_remove_pkg(pkg_to_remove, 0))
+                err = -1;
+           else
+                 done = 1;
         }
      }
 
@@ -743,7 +761,7 @@ opkg_remove_cmd(int argc, char **argv)
         opkg_msg(NOTICE, "No packages removed.\n");
 
      write_status_files_if_changed();
-     return 0;
+     return err;
 }
 
 static int