General Public License for more details.
*/
+#include "config.h"
-#include "includes.h"
+#include <stdio.h>
#include <dirent.h>
#include <glob.h>
#include <fnmatch.h>
+#include <signal.h>
+#include <unistd.h>
#include "opkg_conf.h"
#include "opkg_cmd.h"
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;
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);
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);
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();
{
int i;
pkg_t *pkg;
- int err;
+ int err = 0;
signal(SIGINT, sigint_handler);
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();
} 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 {
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;
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);
}
}
- return 0;
+ return err;
}
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;
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;
}
}
opkg_msg(NOTICE, "No packages removed.\n");
write_status_files_if_changed();
- return 0;
+ return err;
}
static int