X-Git-Url: https://git.librecmc.org/?p=oweals%2Fopkg-lede.git;a=blobdiff_plain;f=libopkg%2Fopkg_cmd.c;h=42bfd16ade1a47d14fd58a491c3ed909cdab7db3;hp=83f4a16adb080a7f550cdabad2cea4b9e83557bf;hb=9020bb63c0005f68973b6d21290e7808c63ed487;hpb=376e31b20313890238b769958da6cd149d3ef70d diff --git a/libopkg/opkg_cmd.c b/libopkg/opkg_cmd.c index 83f4a16..42bfd16 100644 --- a/libopkg/opkg_cmd.c +++ b/libopkg/opkg_cmd.c @@ -19,6 +19,7 @@ #include "includes.h" #include #include +#include #include "opkg_conf.h" #include "opkg_cmd.h" @@ -33,18 +34,14 @@ #include "libbb/libbb.h" #include "opkg_utils.h" #include "opkg_defines.h" - -#include - - #include "opkg_download.h" #include "opkg_install.h" #include "opkg_upgrade.h" #include "opkg_remove.h" #include "opkg_configure.h" #include "opkg_message.h" - #include "libopkg.h" +#include "xsystem.h" static int opkg_update_cmd(opkg_conf_t *conf, int argc, char **argv); static int opkg_upgrade_cmd(opkg_conf_t *conf, int argc, char **argv); @@ -326,7 +323,6 @@ static opkg_intercept_t opkg_prep_intercepts(opkg_conf_t *conf) static int opkg_finalize_intercepts(opkg_intercept_t ctx) { - char *cmd; DIR *dir; int err = 0; @@ -338,16 +334,14 @@ static int opkg_finalize_intercepts(opkg_intercept_t ctx) struct dirent *de; while (de = readdir (dir), de != NULL) { char *path; - + if (de->d_name[0] == '.') continue; sprintf_alloc (&path, "%s/%s", ctx->statedir, de->d_name); if (access (path, X_OK) == 0) { - if (system (path)) { - err = errno; - perror (de->d_name); - } + const char *argv[] = {"sh", "-c", path, NULL}; + xsystem (argv); } free (path); } @@ -355,10 +349,7 @@ static int opkg_finalize_intercepts(opkg_intercept_t ctx) } else perror (ctx->statedir); - sprintf_alloc (&cmd, "rm -rf %s", ctx->statedir); - err = system (cmd); - free (cmd); - + rm_r(ctx->statedir); free (ctx->statedir); free (ctx); @@ -483,8 +474,10 @@ static int opkg_configure_packages(opkg_conf_t *conf, char *pkg_name) } ic = opkg_prep_intercepts (conf); - if (ic == NULL) - return -1; + if (ic == NULL) { + err = -1; + goto error; + } for(i = 0; i < all->len; i++) { pkg = all->pkgs[i]; @@ -512,6 +505,7 @@ static int opkg_configure_packages(opkg_conf_t *conf, char *pkg_name) if (r && !err) err = r; +error: pkg_vec_free(all); pkg_vec_free(ordered); pkg_vec_free(visited); @@ -761,7 +755,7 @@ static int opkg_info_status_cmd(opkg_conf_t *conf, int argc, char **argv, int in pkg_formatted_info(stdout, pkg); - if (conf->verbosity > 1) { + if (conf->verbosity >= OPKG_NOTICE) { conffile_list_elt_t *iter; for (iter = nv_pair_list_first(&pkg->conffiles); iter; iter = nv_pair_list_next(&pkg->conffiles, iter)) { conffile_t *cf = (conffile_t *)iter->data; @@ -1035,7 +1029,7 @@ static int opkg_files_cmd(opkg_conf_t *conf, int argc, char **argv) return 0; } - files = pkg_get_installed_files(pkg); + files = pkg_get_installed_files(conf, pkg); pkg_version = pkg_version_str_alloc(pkg); printf("Package %s (%s) is installed on %s and has the following files:\n", @@ -1068,26 +1062,25 @@ static int opkg_depends_cmd(opkg_conf_t *conf, int argc, char **argv) const char *target = argv[i]; int j; - opkg_message(conf, OPKG_ERROR, "target=%s\n", target); + opkg_message(conf, OPKG_NOTICE, "target=%s\n", target); for (j = 0; j < available_pkgs->len; j++) { pkg_t *pkg = available_pkgs->pkgs[j]; if (fnmatch(target, pkg->name, 0) == 0) { int k; int count = pkg->depends_count + pkg->pre_depends_count; - opkg_message(conf, OPKG_ERROR, "What %s (arch=%s) %s\n", + opkg_message(conf, OPKG_NOTICE, "What %s (arch=%s) %s\n", target, pkg->architecture, rel_str); for (k = 0; k < count; k++) { compound_depend_t *cdepend = &pkg->depends[k]; int l; for (l = 0; l < cdepend->possibility_count; l++) { depend_t *possibility = cdepend->possibilities[l]; - opkg_message(conf, OPKG_ERROR, " %s", possibility->pkg->name); - if (conf->verbosity > 0) { - // char *ver = abstract_pkg_version_str_alloc(possibility->pkg); - opkg_message(conf, OPKG_NOTICE, " %s", possibility->version); + opkg_message(conf, OPKG_NOTICE, " %s", possibility->pkg->name); + if (conf->verbosity >= OPKG_NOTICE) { if (possibility->version) { char *typestr = NULL; + opkg_message(conf, OPKG_NOTICE, " %s", possibility->version); switch (possibility->constraint) { case NONE: typestr = "none"; break; case EARLIER: typestr = "<"; break; @@ -1098,9 +1091,8 @@ static int opkg_depends_cmd(opkg_conf_t *conf, int argc, char **argv) } opkg_message(conf, OPKG_NOTICE, " (%s %s)", typestr, possibility->version); } - // free(ver); } - opkg_message(conf, OPKG_ERROR, "\n"); + opkg_message(conf, OPKG_NOTICE, "\n"); } } } @@ -1120,7 +1112,7 @@ enum what_field_type { WHATSUGGESTS }; -static int opkg_what_depends_conflicts_cmd(opkg_conf_t *conf, enum what_field_type what_field_type, int recursive, int argc, char **argv) +static int opkg_what_depends_conflicts_cmd(opkg_conf_t *conf, enum depend_type what_field_type, int recursive, int argc, char **argv) { if (argc > 0) { @@ -1130,12 +1122,11 @@ static int opkg_what_depends_conflicts_cmd(opkg_conf_t *conf, enum what_field_ty int changed; switch (what_field_type) { - case WHATDEPENDS: rel_str = "depends on"; break; - case WHATCONFLICTS: rel_str = "conflicts with"; break; - case WHATSUGGESTS: rel_str = "suggests"; break; - case WHATRECOMMENDS: rel_str = "recommends"; break; - case WHATPROVIDES: rel_str = "provides"; break; - case WHATREPLACES: rel_str = "replaces"; break; + case DEPEND: rel_str = "depends on"; break; + case CONFLICTS: rel_str = "conflicts with"; break; + case SUGGEST: rel_str = "suggests"; break; + case RECOMMEND: rel_str = "recommends"; break; + default: return -1; } if (conf->query_all) @@ -1167,7 +1158,7 @@ static int opkg_what_depends_conflicts_cmd(opkg_conf_t *conf, enum what_field_ty for (j = 0; j < available_pkgs->len; j++) { pkg_t *pkg = available_pkgs->pkgs[j]; int k; - int count = ((what_field_type == WHATCONFLICTS) + int count = ((what_field_type == CONFLICTS) ? pkg->conflicts_count : pkg->pre_depends_count + pkg->depends_count + pkg->recommends_count + pkg->suggests_count); /* skip this package if it is already marked */ @@ -1176,8 +1167,10 @@ static int opkg_what_depends_conflicts_cmd(opkg_conf_t *conf, enum what_field_ty } for (k = 0; k < count; k++) { compound_depend_t *cdepend = - (what_field_type == WHATCONFLICTS) ? &pkg->conflicts[k] : &pkg->depends[k]; + (what_field_type == CONFLICTS) ? &pkg->conflicts[k] : &pkg->depends[k]; int l; + if (what_field_type != cdepend->type) + continue; for (l = 0; l < cdepend->possibility_count; l++) { depend_t *possibility = cdepend->possibilities[l]; if (possibility->pkg->state_flag & SF_MARKED) { @@ -1186,9 +1179,9 @@ static int opkg_what_depends_conflicts_cmd(opkg_conf_t *conf, enum what_field_ty pkg_mark_provides(pkg); changed++; - opkg_message(conf, OPKG_NOTICE, " %s", pkg->name); - if (conf->verbosity > 0) { + if (conf->verbosity >= OPKG_NOTICE) { char *ver = pkg_version_str_alloc(pkg); + opkg_message(conf, OPKG_NOTICE, " %s", pkg->name); opkg_message(conf, OPKG_NOTICE, " %s", ver); opkg_message(conf, OPKG_NOTICE, "\t%s %s", rel_str, possibility->pkg->name); if (possibility->version) { @@ -1236,26 +1229,26 @@ static int pkg_mark_provides(pkg_t *pkg) static int opkg_whatdepends_recursively_cmd(opkg_conf_t *conf, int argc, char **argv) { - return opkg_what_depends_conflicts_cmd(conf, WHATDEPENDS, 1, argc, argv); + return opkg_what_depends_conflicts_cmd(conf, DEPEND, 1, argc, argv); } static int opkg_whatdepends_cmd(opkg_conf_t *conf, int argc, char **argv) { - return opkg_what_depends_conflicts_cmd(conf, WHATDEPENDS, 0, argc, argv); + return opkg_what_depends_conflicts_cmd(conf, DEPEND, 0, argc, argv); } static int opkg_whatsuggests_cmd(opkg_conf_t *conf, int argc, char **argv) { - return opkg_what_depends_conflicts_cmd(conf, WHATSUGGESTS, 0, argc, argv); + return opkg_what_depends_conflicts_cmd(conf, SUGGEST, 0, argc, argv); } static int opkg_whatrecommends_cmd(opkg_conf_t *conf, int argc, char **argv) { - return opkg_what_depends_conflicts_cmd(conf, WHATRECOMMENDS, 0, argc, argv); + return opkg_what_depends_conflicts_cmd(conf, RECOMMEND, 0, argc, argv); } static int opkg_whatconflicts_cmd(opkg_conf_t *conf, int argc, char **argv) { - return opkg_what_depends_conflicts_cmd(conf, WHATCONFLICTS, 0, argc, argv); + return opkg_what_depends_conflicts_cmd(conf, CONFLICTS, 0, argc, argv); } static int opkg_what_provides_replaces_cmd(opkg_conf_t *conf, enum what_field_type what_field_type, int argc, char **argv) @@ -1332,7 +1325,7 @@ static int opkg_search_cmd(opkg_conf_t *conf, int argc, char **argv) for (i=0; i < installed->len; i++) { pkg = installed->pkgs[i]; - installed_files = pkg_get_installed_files(pkg); + installed_files = pkg_get_installed_files(conf, pkg); for (iter = str_list_first(installed_files); iter; iter = str_list_next(installed_files, iter)) { installed_file = (char *)iter->data; @@ -1353,8 +1346,8 @@ static int opkg_compare_versions_cmd(opkg_conf_t *conf, int argc, char **argv) if (argc == 3) { /* this is a bit gross */ struct pkg p1, p2; - parseVersion(&p1, argv[0]); - parseVersion(&p2, argv[2]); + parse_version(&p1, argv[0]); + parse_version(&p2, argv[2]); return pkg_version_satisfied(&p1, &p2, argv[1]); } else { opkg_message(conf, OPKG_ERROR,