From a5ef09fae04cd4274542b9f5f052e439e56450fc Mon Sep 17 00:00:00 2001 From: graham.gower Date: Thu, 26 Nov 2009 19:41:44 -0500 Subject: Add error checking to deb_extract(), unarchive(), extract_archive(). et al. git-svn-id: http://opkg.googlecode.com/svn/trunk@390 e8e0d7a0-c8d9-11dd-a880-a1081c7ac358 --- (limited to 'libopkg') diff --git a/libopkg/pkg_extract.c b/libopkg/pkg_extract.c index d8b06a6..c4d74a3 100644 --- a/libopkg/pkg_extract.c +++ b/libopkg/pkg_extract.c @@ -27,68 +27,63 @@ /* assuage libb functions */ const char *applet_name = "opkg"; -int pkg_extract_control_file_to_stream(pkg_t *pkg, FILE *stream) +int +pkg_extract_control_file_to_stream(pkg_t *pkg, FILE *stream) { - deb_extract(pkg->local_filename, stream, - extract_control_tar_gz - | extract_to_stream, - NULL, "./control"); + int err; + deb_extract(pkg->local_filename, stream, + extract_control_tar_gz + | extract_to_stream, + NULL, "./control", &err); - return 0; + return err; } -int pkg_extract_control_files_to_dir(pkg_t *pkg, const char *dir) +int +pkg_extract_control_files_to_dir_with_prefix(pkg_t *pkg, const char *dir, + const char *prefix) { - return pkg_extract_control_files_to_dir_with_prefix(pkg, dir, ""); -} - -int pkg_extract_control_files_to_dir_with_prefix(pkg_t *pkg, - const char *dir, - const char *prefix) -{ - char *dir_with_prefix; - char *buffer = NULL; + int err; + char *dir_with_prefix; - sprintf_alloc(&dir_with_prefix, "%s/%s", dir, prefix); + sprintf_alloc(&dir_with_prefix, "%s/%s", dir, prefix); - buffer = deb_extract(pkg->local_filename, stderr, - extract_control_tar_gz - | extract_all_to_fs| extract_preserve_date - | extract_unconditional, - dir_with_prefix, NULL); + deb_extract(pkg->local_filename, stderr, + extract_control_tar_gz + | extract_all_to_fs| extract_preserve_date + | extract_unconditional, + dir_with_prefix, NULL, &err); - free(dir_with_prefix); - - /* 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. */ + free(dir_with_prefix); + return err; +} - if (buffer) { - free(buffer); - } - return 0; +int +pkg_extract_control_files_to_dir(pkg_t *pkg, const char *dir) +{ + return pkg_extract_control_files_to_dir_with_prefix(pkg, dir, ""); } -int pkg_extract_data_files_to_dir(pkg_t *pkg, const char *dir) + +int +pkg_extract_data_files_to_dir(pkg_t *pkg, const char *dir) { - char *buffer = NULL; - buffer = deb_extract(pkg->local_filename, stderr, + int err; + + deb_extract(pkg->local_filename, stderr, extract_data_tar_gz - | extract_all_to_fs| extract_preserve_date + | 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. */ + dir, NULL, &err); - if (buffer) { - free(buffer); - } - return 0; + return err; } -int pkg_extract_data_file_names_to_stream(pkg_t *pkg, FILE *file) +int +pkg_extract_data_file_names_to_stream(pkg_t *pkg, FILE *stream) { - char *buffer = NULL; + int err; + /* 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 @@ -101,14 +96,10 @@ 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. */ - 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; + + deb_extract(pkg->local_filename, stream, + extract_quiet | extract_data_tar_gz | extract_list, + NULL, NULL, &err); + + return err; } -- cgit v0.9.1