X-Git-Url: https://git.librecmc.org/?p=oweals%2Fopkg-lede.git;a=blobdiff_plain;f=libopkg%2Fopkg_cmd.c;h=7d5bd04a8d45f06c7f3a9ee064eb24581249c755;hp=c50d8f9cf8f72582bc20c55da8510d29f33efb5f;hb=e450488296dcb20d93dd4f48ffd887f440ce17c8;hpb=98ce8c256f3c430bc0077a20cbd041b3f36c177a diff --git a/libopkg/opkg_cmd.c b/libopkg/opkg_cmd.c index c50d8f9..7d5bd04 100644 --- a/libopkg/opkg_cmd.c +++ b/libopkg/opkg_cmd.c @@ -15,8 +15,6 @@ General Public License for more details. */ -#include "config.h" - #include #include #include @@ -132,7 +130,7 @@ static int opkg_update_cmd(int argc, char **argv) sprintf_alloc(&list_file_name, "%s/%s", lists_dir, src->name); pkglist_dl_error = 0; - if (opkg_download(url, list_file_name, NULL, NULL, 0)) { + if (opkg_download(url, list_file_name, 0)) { failures++; pkglist_dl_error = 1; opkg_msg(NOTICE, @@ -144,7 +142,7 @@ static int opkg_update_cmd(int argc, char **argv) list_file_name); } free(url); -#if defined(HAVE_GPGME) || defined(HAVE_OPENSSL) || defined(HAVE_USIGN) +#if defined(HAVE_USIGN) if (pkglist_dl_error == 0 && conf->check_signature) { /* download detached signitures to verify the package lists */ /* get the url for the sig file */ @@ -162,7 +160,7 @@ static int opkg_update_cmd(int argc, char **argv) sprintf_alloc(&tmp_file_name, "%s/%s.sig", lists_dir, src->name); - err = opkg_download(url, tmp_file_name, NULL, NULL, 0); + err = opkg_download(url, tmp_file_name, 0); if (err) { failures++; opkg_msg(NOTICE, @@ -216,13 +214,19 @@ static opkg_intercept_t opkg_prep_intercepts(void) ctx = xcalloc(1, sizeof(*ctx)); ctx->oldpath = xstrdup(getenv("PATH")); - sprintf_alloc(&newpath, "%s/opkg/intercept:%s", DATADIR, ctx->oldpath); + + sprintf_alloc(&newpath, "%s/opkg/intercept:%s", DATADIR, + ctx->oldpath ? ctx->oldpath : PATH_SPEC); + sprintf_alloc(&ctx->statedir, "%s/opkg-intercept-XXXXXX", - conf->tmp_dir); + conf->tmp_dir); if (mkdtemp(ctx->statedir) == NULL) { opkg_perror(ERROR, "Failed to make temp dir %s", ctx->statedir); - free(ctx->oldpath); + + if (ctx->oldpath) + free(ctx->oldpath); + free(ctx->statedir); free(newpath); free(ctx); @@ -241,8 +245,13 @@ static int opkg_finalize_intercepts(opkg_intercept_t ctx) DIR *dir; int err = 0; - setenv("PATH", ctx->oldpath, 1); - free(ctx->oldpath); + if (ctx->oldpath) { + setenv("PATH", ctx->oldpath, 1); + free(ctx->oldpath); + } + else { + unsetenv("PATH"); + } dir = opendir(ctx->statedir); if (dir) { @@ -256,7 +265,7 @@ static int opkg_finalize_intercepts(opkg_intercept_t ctx) sprintf_alloc(&path, "%s/%s", ctx->statedir, de->d_name); if (access(path, X_OK) == 0) { - const char *argv[] = { "sh", "-c", path, NULL }; + const char *argv[] = { "/bin/sh", "-c", path, NULL }; xsystem(argv); } free(path); @@ -435,14 +444,6 @@ static int opkg_install_cmd(int argc, char **argv) char *arg; 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); /* @@ -455,6 +456,18 @@ static int opkg_install_cmd(int argc, char **argv) if (opkg_prepare_url_for_install(arg, &argv[i])) return -1; } + + pkg_hash_load_package_details(); + pkg_hash_load_status_files(); + + 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; + } + pkg_info_preinstall_check(); for (i = 0; i < argc; i++) { @@ -665,7 +678,7 @@ static int opkg_list_upgradable_cmd(int argc, char **argv) char *old_v, *new_v; for (node = active_list_next(head, head); node; node = active_list_next(head, node)) { - _old_pkg = list_entry(node, pkg_t, list); + _old_pkg = node->pkg; _new_pkg = pkg_hash_fetch_best_installation_candidate_by_name (_old_pkg->name); @@ -1031,7 +1044,7 @@ opkg_what_depends_conflicts_cmd(enum depend_type what_field_type, int recursive, deps = pkg_get_ptr(pkg, (what_field_type == CONFLICTS) ? PKG_CONFLICTS : PKG_DEPENDS); - for (cdep = deps; cdep->type; cdep++) { + for (cdep = deps; cdep && cdep->type; cdep++) { if (what_field_type != cdep->type) continue; @@ -1134,7 +1147,7 @@ opkg_what_provides_replaces_cmd(enum what_field_type what_field_type, int argc, abpkgs = pkg_get_ptr(pkg, (what_field_type == WHATPROVIDES) ? PKG_PROVIDES : PKG_REPLACES); while (abpkgs && *abpkgs) { - apkg = *abpkgs; + apkg = *abpkgs++; if (fnmatch(target, apkg->name, conf->nocase)) continue; @@ -1146,7 +1159,6 @@ opkg_what_provides_replaces_cmd(enum what_field_type what_field_type, int argc, opkg_msg(NOTICE, "\t%s %s\n", rel_str, apkg->name); opkg_message(NOTICE, "\n"); - abpkgs++; } } }