General Public License for more details.
*/
-#include "includes.h"
-#include <errno.h>
+#include <stdio.h>
#include "pkg_extract.h"
-
#include "libbb/libbb.h"
#include "file_util.h"
#include "sprintf_alloc.h"
-/* assuage libb functions */
-const char *applet_name = "opkg";
+int pkg_extract_control_file_to_stream(pkg_t * pkg, FILE * stream)
+{
+ int err;
+ deb_extract(pkg_get_string(pkg, PKG_LOCAL_FILENAME), stream,
+ extract_control_tar_gz
+ | extract_to_stream, NULL, "control", &err);
+ return err;
+}
-int pkg_extract_control_file_to_stream(pkg_t *pkg, FILE *stream)
+int
+pkg_extract_control_files_to_dir_with_prefix(pkg_t * pkg, const char *dir,
+ const char *prefix)
{
- deb_extract(pkg->local_filename, stream,
- extract_control_tar_gz
- | extract_to_stream,
- NULL, "./control");
+ int err;
+ char *dir_with_prefix;
- return 0;
+ sprintf_alloc(&dir_with_prefix, "%s/%s", dir, prefix);
+
+ deb_extract(pkg_get_string(pkg, 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);
+ return err;
}
-int pkg_extract_control_files_to_dir(pkg_t *pkg, const char *dir)
+int pkg_extract_control_files_to_dir(pkg_t * pkg, const char *dir)
{
- return pkg_extract_control_files_to_dir_with_prefix(pkg, dir, "");
+ 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)
+int pkg_extract_data_files_to_dir(pkg_t * pkg, const char *dir)
{
- char *dir_with_prefix;
- char *buffer = NULL;
+ int err;
+
+ deb_extract(pkg_get_string(pkg, PKG_LOCAL_FILENAME), stderr,
+ extract_data_tar_gz
+ | extract_all_to_fs | extract_preserve_date
+ | extract_unconditional, dir, NULL, &err);
- sprintf_alloc(&dir_with_prefix, "%s/%s", dir, prefix);
+ return err;
+}
- buffer = deb_extract(pkg->local_filename, stderr,
- extract_control_tar_gz
- | extract_all_to_fs| extract_preserve_date
- | extract_unconditional,
- dir_with_prefix, NULL);
+int pkg_extract_data_file_names_to_stream(pkg_t * pkg, FILE * stream)
+{
+ int err;
- free(dir_with_prefix);
+ /* 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
+ this may trip up dpkg.
- /* 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. */
+ For all I know, this could actually be a bug in opkg-build. So,
+ I'll have to try installing some .debs and comparing the *.list
+ files.
- if (buffer) {
- free(buffer);
- }
- return 0;
-}
+ 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. */
-int pkg_extract_data_files_to_dir(pkg_t *pkg, const char *dir)
-{
- 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) {
- free(buffer);
- }
- return 0;
-}
+ deb_extract(pkg_get_string(pkg, PKG_LOCAL_FILENAME), stream,
+ extract_quiet | extract_data_tar_gz | extract_list,
+ NULL, NULL, &err);
-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
- this may trip up dpkg.
-
- For all I know, this could actually be a bug in opkg-build. So,
- I'll have to try installing some .debs and comparing the *.list
- files.
-
- 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;
+ return err;
}