summaryrefslogtreecommitdiffstats
path: root/libopkg/pkg_extract.c
diff options
context:
space:
mode:
Diffstat (limited to 'libopkg/pkg_extract.c')
-rw-r--r--libopkg/pkg_extract.c28
1 files changed, 18 insertions, 10 deletions
diff --git a/libopkg/pkg_extract.c b/libopkg/pkg_extract.c
index eae7746..0aae4ad 100644
--- a/libopkg/pkg_extract.c
+++ b/libopkg/pkg_extract.c
@@ -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,23 +65,26 @@ 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.
-
- Once this is fixed, audit all calls to deb_extract. */
+ if (buffer == NULL) {
+ return EINVAL;
+ }
+ 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,
dir, 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 == NULL) {
+ return EINVAL;
+ }
+ free(buffer);
return 0;
}
@@ -148,6 +151,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
@@ -160,11 +164,15 @@ 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 == NULL) {
+ return EINVAL;
+ }
+ free(buffer);
return 0;
}