Don't prompt for user input from stdin if it's not a tty.
[oweals/opkg-lede.git] / libopkg / pkg_extract.c
index 23356eab205edc60489547ae558a844ef70efbba..7f22ff32db8401f996a0cd3d1e353fb6a3ea5897 100644 (file)
@@ -1,4 +1,4 @@
-/* pkg_extract.c - the itsy package management system
+/* pkg_extract.c - the opkg package management system
 
    Carl D. Worth
 
@@ -37,7 +37,6 @@ int pkg_extract_control_file_to_stream(pkg_t *pkg, FILE *stream)
        return EINVAL;
     }
 
-    /* XXX: QUESTION: Is there a way to do this directly with deb_extract now? */
     fputs(buffer, stream);
     free(buffer);
 
@@ -54,10 +53,11 @@ int pkg_extract_control_files_to_dir_with_prefix(pkg_t *pkg,
                                                 const char *prefix)
 {
     char *dir_with_prefix;
+    char *buffer = NULL;
 
     sprintf_alloc(&dir_with_prefix, "%s/%s", dir, prefix);
 
-    deb_extract(pkg->local_filename, stderr,
+    buffer = deb_extract(pkg->local_filename, stderr,
                extract_control_tar_gz
                 | extract_all_to_fs| extract_preserve_date
                | extract_unconditional,
@@ -65,16 +65,19 @@ int pkg_extract_control_files_to_dir_with_prefix(pkg_t *pkg,
 
     free(dir_with_prefix);
 
-    /* XXX: BUG: how do we know if deb_extract worked or not? This is
-       a defect in the current deb_extract from what I can tell.
+    /* BUG: How do we know if deb_extract worked or not? This is a
+       defect in the current deb_extract from what I can tell. */
 
-       Once this is fixed, audit all calls to deb_extract. */
+    if (buffer) {
+        free(buffer);
+    }
     return 0;
 }
 
 int pkg_extract_data_files_to_dir(pkg_t *pkg, const char *dir)
 {
-    deb_extract(pkg->local_filename, stderr,
+    char *buffer = NULL;
+    buffer = deb_extract(pkg->local_filename, stderr,
                extract_data_tar_gz
                 | extract_all_to_fs| extract_preserve_date
                | extract_unconditional,
@@ -82,6 +85,10 @@ int pkg_extract_data_files_to_dir(pkg_t *pkg, const char *dir)
 
     /* BUG: How do we know if deb_extract worked or not? This is a
        defect in the current deb_extract from what I can tell. */
+
+    if (buffer) {
+        free(buffer);
+    }
     return 0;
 }
 
@@ -102,8 +109,8 @@ int pkg_extract_data_file_names_to_file(pkg_t *pkg, const char *file_name)
      tmp = tmpfile();
      if (pkg->installed_files) {
          str_list_elt_t *elt;
-         for (elt = pkg->installed_files->head; elt; elt = elt->next) {
-              fprintf(file, "%s\n", elt->data);
+         for (elt = str_list_first(pkg->installed_files); elt; elt = str_list_next(pkg->installed_files, elt)) {
+              fprintf(file, "%s\n", (char *)elt->data);
          }
      } else {
          err = pkg_extract_data_file_names_to_stream(pkg, tmp);
@@ -136,6 +143,8 @@ int pkg_extract_data_file_names_to_file(pkg_t *pkg, const char *file_name)
               } else {
                    fputs(data_file, file);
               }
+              free(line);
+              line=NULL;
          }
      }
      fclose(tmp);
@@ -146,6 +155,7 @@ int pkg_extract_data_file_names_to_file(pkg_t *pkg, const char *file_name)
 
 int pkg_extract_data_file_names_to_stream(pkg_t *pkg, FILE *file)
 {
+    char *buffer = NULL;
     /* XXX: DPKG_INCOMPATIBILITY: deb_extract will extract all of the
        data file names with a '.' as the first character. I've taught
        opkg how to cope with the presence or absence of the '.', but
@@ -158,11 +168,14 @@ int pkg_extract_data_file_names_to_stream(pkg_t *pkg, FILE *file)
        If we wanted to, we could workaround the deb_extract behavior
        right here, by writing to a tmpfile, then munging things as we
        wrote to the actual stream. */
-     deb_extract(pkg->local_filename, file,
+    buffer = deb_extract(pkg->local_filename, file,
                 extract_quiet | extract_data_tar_gz | extract_list,
                 NULL, NULL);
 
     /* BUG: How do we know if deb_extract worked or not? This is a
        defect in the current deb_extract from what I can tell. */
+    if (buffer) {
+        free(buffer);
+    }
     return 0;
 }