There is no need to use a buffer at all.
[oweals/opkg-lede.git] / libopkg / pkg.c
index c41629cb13d10e196ce5272cb44daeb64378ed4f..89f47a9e46445b0646025f27c554dcb5560ba1da 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)
@@ -1041,7 +1046,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));