Fix pkg_depend_str() to not use pkg->depends_str.
[oweals/opkg-lede.git] / libopkg / pkg.c
index c41629cb13d10e196ce5272cb44daeb64378ed4f..e37806b711753e98563f50d5b848cf549498f2ed 100644 (file)
@@ -301,7 +301,7 @@ void pkg_deinit(pkg_t *pkg)
 }
 
 int
-pkg_init_from_file(pkg_t *pkg, const char *filename)
+pkg_init_from_file(opkg_conf_t *conf, pkg_t *pkg, const char *filename)
 {
        int fd, err = 0;
        FILE *control_file;
@@ -311,7 +311,9 @@ pkg_init_from_file(pkg_t *pkg, const char *filename)
 
        pkg->local_filename = xstrdup(filename);
 
-       sprintf_alloc(&control_path, "%s.control.XXXXXX", filename);
+       sprintf_alloc(&control_path, "%s/%s.control.XXXXXX", 
+                        conf->tmp_dir,
+                        basename(filename));
        fd = mkstemp(control_path);
        if (fd == -1) {
                perror_msg("%s: mkstemp(%s)", __FUNCTION__, control_path);
@@ -319,7 +321,7 @@ pkg_init_from_file(pkg_t *pkg, const char *filename)
                goto err0;
        }
 
-       control_file = fdopen(fd, "rw+");
+       control_file = fdopen(fd, "r+");
        if (control_file == NULL) {
                perror_msg("%s: fdopen", __FUNCTION__, control_path);
                close(fd);
@@ -358,6 +360,9 @@ int pkg_merge(pkg_t *oldpkg, pkg_t *newpkg, int set_status)
          return 0;
      }
 
+     if (!oldpkg->auto_installed)
+         oldpkg->auto_installed = newpkg->auto_installed;
+
      if (!oldpkg->src)
          oldpkg->src = newpkg->src;
      if (!oldpkg->dest)
@@ -525,27 +530,6 @@ void set_flags_from_control(opkg_conf_t *conf, pkg_t *pkg){
      return;
 }
 
-const char*
-constraint_to_str(enum version_constraint c)
-{
-       switch (c) {
-       case NONE:
-               return "";
-       case EARLIER:
-               return "< ";
-       case EARLIER_EQUAL:
-              return "<= ";
-       case EQUAL:
-              return "= ";
-       case LATER_EQUAL:
-             return ">= ";
-       case LATER:
-            return "> ";
-       }
-
-       return "";
-}
-
 void pkg_formatted_field(FILE *fp, pkg_t *pkg, const char *field)
 {
      int i;
@@ -611,7 +595,9 @@ void pkg_formatted_field(FILE *fp, pkg_t *pkg, const char *field)
               if (pkg->depends_count) {
                     fprintf(fp, "Depends:");
                    for(i = 0; i < pkg->depends_count; i++) {
-                        fprintf(fp, "%s %s", i == 0 ? "" : ",", pkg->depends_str[i]);
+                       char *str = pkg_depend_str(pkg, i);
+                       fprintf(fp, "%s %s", i == 0 ? "" : ",", str);
+                       free(str);
                     }
                    fprintf(fp, "\n");
               }
@@ -1041,7 +1027,7 @@ str_list_t *pkg_get_installed_files(opkg_conf_t *conf, pkg_t *pkg)
               free(list_file_name);
               return pkg->installed_files;
          }
-         list_file = fdopen(fd, "rw+");
+         list_file = fdopen(fd, "r+");
          if (list_file == NULL) {
               opkg_message(conf, OPKG_ERROR, "%s: fdopen: %s",
                               __FUNCTION__, strerror(errno));