Fix output of whatdepends, whatsuggests and whatrecommends commands.
[oweals/opkg-lede.git] / libopkg / opkg_cmd.c
index 9a490828c7bb9d17f714c72837b8b3a52601984e..42bfd16ade1a47d14fd58a491c3ed909cdab7db3 100644 (file)
@@ -323,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;
 
@@ -341,7 +340,8 @@ 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) {
-               xsystem (path);
+               const char *argv[] = {"sh", "-c", path, NULL};
+               xsystem (argv);
            }
            free (path);
        }
@@ -349,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 = xsystem (cmd);
-    free (cmd);
-
+    rm_r(ctx->statedir);
     free (ctx->statedir);
     free (ctx);
 
@@ -1032,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",
@@ -1065,25 +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);
+                                  opkg_message(conf, OPKG_NOTICE, "    %s", possibility->pkg->name);
                                   if (conf->verbosity >= OPKG_NOTICE) {
-                                       opkg_message(conf, OPKG_NOTICE, " %s", possibility->version);
                                        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;
@@ -1095,7 +1092,7 @@ static int opkg_depends_cmd(opkg_conf_t *conf, int argc, char **argv)
                                             opkg_message(conf, OPKG_NOTICE, " (%s %s)", typestr, possibility->version);
                                        }
                                   }
-                                  opkg_message(conf, OPKG_ERROR, "\n");
+                                  opkg_message(conf, OPKG_NOTICE, "\n");
                              }
                         }
                    }
@@ -1115,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) {
@@ -1125,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)
@@ -1162,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 */
@@ -1171,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) {
@@ -1231,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)
@@ -1327,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;