]> git.ipfire.org Git - thirdparty/libarchive.git/commitdiff
Add large file support for android 670/head
authordosomder <dosomder@users.noreply.github.com>
Sun, 13 Mar 2016 16:52:24 +0000 (17:52 +0100)
committerdosomder <dosomder@users.noreply.github.com>
Mon, 14 Mar 2016 09:53:20 +0000 (10:53 +0100)
Android doesn't support the macro _FILE_OFFSET_BITS=64 however it does
support a few file64 functions

contrib/android/Android.mk
contrib/android/include/android_lf.h [new file with mode: 0644]
libarchive/archive.h
libarchive/archive_entry.h
libarchive/archive_read_open_file.c

index 43620279524f6cae9002dcbe8809611c00eaa392..b82beab4a6d2b90d35585227bdf724109c0ba34b 100644 (file)
@@ -179,9 +179,7 @@ LOCAL_MODULE := libarchive
 LOCAL_MODULE_TAGS := optional
 LOCAL_SRC_FILES := $(libarchive_src_files) $(libarchive_host_src_files)
 LOCAL_CFLAGS := -DPLATFORM_CONFIG_H=\"$(libarchive_host_config)\"
-ifneq ($(strip $(USE_MINGW)),)
-       LOCAL_C_INCLUDES := $(LOCAL_PATH)/contrib/android/include
-endif
+LOCAL_C_INCLUDES := $(LOCAL_PATH)/contrib/android/include
 LOCAL_EXPORT_C_INCLUDE_DIRS := $(LOCAL_PATH)/libarchive
 include $(BUILD_HOST_STATIC_LIBRARY)
 
@@ -191,9 +189,7 @@ LOCAL_MODULE_TAGS := optional
 LOCAL_CFLAGS := -DPLATFORM_CONFIG_H=\"$(libarchive_host_config)\"
 LOCAL_SHARED_LIBRARIES := libz-host
 LOCAL_WHOLE_STATIC_LIBRARIES := libarchive
-ifneq ($(strip $(USE_MINGW)),)
-       LOCAL_C_INCLUDES := $(LOCAL_PATH)/contrib/android/include
-endif
+LOCAL_C_INCLUDES := $(LOCAL_PATH)/contrib/android/include
 LOCAL_EXPORT_C_INCLUDE_DIRS := $(LOCAL_PATH)/libarchive
 include $(BUILD_HOST_SHARED_LIBRARY)
 
@@ -202,9 +198,7 @@ LOCAL_MODULE := libarchive_fe
 LOCAL_MODULE_TAGS := optional
 LOCAL_CFLAGS := -DPLATFORM_CONFIG_H=\"$(libarchive_host_config)\"
 LOCAL_SRC_FILES := $(libarchive_fe_src_files)
-ifneq ($(strip $(USE_MINGW)),)
-       LOCAL_C_INCLUDES := $(LOCAL_PATH)/contrib/android/include
-endif
+LOCAL_C_INCLUDES := $(LOCAL_PATH)/contrib/android/include
 LOCAL_EXPORT_C_INCLUDE_DIRS := $(LOCAL_PATH)/libarchive_fe
 include $(BUILD_HOST_STATIC_LIBRARY)
 
@@ -222,6 +216,7 @@ LOCAL_CFLAGS :=  -DBSDTAR_VERSION_STRING=ARCHIVE_VERSION_ONLY_STRING -DPLATFORM_
 LOCAL_SHARED_LIBRARIES := libz-host
 LOCAL_STATIC_LIBRARIES := libarchive libarchive_fe
 LOCAL_SRC_FILES := $(bsdtar_src_files)
+LOCAL_C_INCLUDES := $(LOCAL_PATH)/contrib/android/include
 include $(BUILD_HOST_EXECUTABLE)
 
 include $(CLEAR_VARS)
@@ -231,6 +226,7 @@ LOCAL_CFLAGS :=  -DBSDCPIO_VERSION_STRING=ARCHIVE_VERSION_ONLY_STRING -DPLATFORM
 LOCAL_SHARED_LIBRARIES := libz-host
 LOCAL_STATIC_LIBRARIES := libarchive libarchive_fe
 LOCAL_SRC_FILES := $(bsdcpio_src_files)
+LOCAL_C_INCLUDES := $(LOCAL_PATH)/contrib/android/include
 include $(BUILD_HOST_EXECUTABLE)
 
 include $(CLEAR_VARS)
@@ -240,6 +236,7 @@ LOCAL_CFLAGS := -DBSDCAT_VERSION_STRING=ARCHIVE_VERSION_ONLY_STRING -DPLATFORM_C
 LOCAL_SHARED_LIBRARIES := libz-host
 LOCAL_STATIC_LIBRARIES := libarchive libarchive_fe
 LOCAL_SRC_FILES := $(bsdcat_src_files)
+LOCAL_C_INCLUDES := $(LOCAL_PATH)/contrib/android/include
 include $(BUILD_HOST_EXECUTABLE)
 
 
@@ -248,8 +245,9 @@ include $(CLEAR_VARS)
 LOCAL_MODULE := libarchive
 LOCAL_MODULE_TAGS := optional
 LOCAL_SRC_FILES := $(libarchive_src_files)
-LOCAL_STATIC_LIBRARIES := libz
+LOCAL_STATIC_LIBRARIES := libz liblz4
 LOCAL_CFLAGS := -DPLATFORM_CONFIG_H=\"$(libarchive_target_config)\"
+LOCAL_C_INCLUDES := $(LOCAL_PATH)/contrib/android/include
 LOCAL_EXPORT_C_INCLUDE_DIRS := $(LOCAL_PATH)/libarchive
 include $(BUILD_STATIC_LIBRARY)
 
@@ -261,6 +259,7 @@ LOCAL_C_INCLUDES :=
 LOCAL_CFLAGS := -DPLATFORM_CONFIG_H=\"$(libarchive_target_config)\"
 LOCAL_SHARED_LIBRARIES := libz
 LOCAL_WHOLE_STATIC_LIBRARIES := libarchive
+LOCAL_C_INCLUDES := $(LOCAL_PATH)/contrib/android/include
 LOCAL_EXPORT_C_INCLUDE_DIRS := $(LOCAL_PATH)/libarchive
 include $(BUILD_SHARED_LIBRARY)
 
@@ -269,6 +268,7 @@ LOCAL_MODULE := libarchive_fe
 LOCAL_MODULE_TAGS := optional
 LOCAL_CFLAGS := -DPLATFORM_CONFIG_H=\"$(libarchive_target_config)\"
 LOCAL_SRC_FILES := $(libarchive_fe_src_files)
+LOCAL_C_INCLUDES := $(LOCAL_PATH)/contrib/android/include
 LOCAL_EXPORT_C_INCLUDE_DIRS := $(LOCAL_PATH)/libarchive_fe
 include $(BUILD_STATIC_LIBRARY)
 
@@ -280,6 +280,7 @@ LOCAL_CFLAGS :=  -DBSDTAR_VERSION_STRING=ARCHIVE_VERSION_ONLY_STRING -DPLATFORM_
 LOCAL_SHARED_LIBRARIES := libz
 LOCAL_STATIC_LIBRARIES := libarchive libarchive_fe
 LOCAL_SRC_FILES := $(bsdtar_src_files)
+LOCAL_C_INCLUDES := $(LOCAL_PATH)/libarchive $(LOCAL_PATH)/libarchive_fe $(LOCAL_PATH)/contrib/android/include
 include $(BUILD_EXECUTABLE)
 
 include $(CLEAR_VARS)
@@ -289,6 +290,7 @@ LOCAL_CFLAGS :=  -DBSDCPIO_VERSION_STRING=ARCHIVE_VERSION_ONLY_STRING -DPLATFORM
 LOCAL_SHARED_LIBRARIES := libz
 LOCAL_STATIC_LIBRARIES := libarchive libarchive_fe
 LOCAL_SRC_FILES := $(bsdcpio_src_files)
+LOCAL_C_INCLUDES := $(LOCAL_PATH)/libarchive $(LOCAL_PATH)/libarchive_fe $(LOCAL_PATH)/contrib/android/include
 include $(BUILD_EXECUTABLE)
 
 include $(CLEAR_VARS)
@@ -298,6 +300,7 @@ LOCAL_CFLAGS := -DBSDCAT_VERSION_STRING=ARCHIVE_VERSION_ONLY_STRING -DPLATFORM_C
 LOCAL_SHARED_LIBRARIES := libz
 LOCAL_STATIC_LIBRARIES := libarchive libarchive_fe
 LOCAL_SRC_FILES := $(bsdcat_src_files)
+LOCAL_C_INCLUDES := $(LOCAL_PATH)/libarchive $(LOCAL_PATH)/libarchive_fe $(LOCAL_PATH)/contrib/android/include
 include $(BUILD_EXECUTABLE)
 
 endif
diff --git a/contrib/android/include/android_lf.h b/contrib/android/include/android_lf.h
new file mode 100644 (file)
index 0000000..3c5475e
--- /dev/null
@@ -0,0 +1,47 @@
+/* \r
+ * Macros for file64 functions\r
+ *\r
+ * Android does not support the macro _FILE_OFFSET_BITS=64\r
+ * As of android-21 it does however support many file64 functions\r
+*/\r
+\r
+#ifndef ARCHIVE_ANDROID_LF_H_INCLUDED\r
+#define ARCHIVE_ANDROID_LF_H_INCLUDED\r
+\r
+#if __ANDROID_API__ > 20\r
+\r
+#include <dirent.h>\r
+#include <fcntl.h>\r
+#include <unistd.h>\r
+#include <sys/stat.h>\r
+#include <sys/statvfs.h>\r
+#include <sys/types.h>\r
+#include <sys/vfs.h>\r
+\r
+//dirent.h\r
+#define readdir_r readdir64_r\r
+#define readdir readdir64\r
+#define dirent dirent64\r
+//fcntl.h\r
+#define openat openat64\r
+#define open open64\r
+#define mkstemp mkstemp64\r
+//unistd.h\r
+#define lseek lseek64\r
+#define ftruncate ftruncate64\r
+//sys/stat.h\r
+#define fstatat fstatat64\r
+#define fstat fstat64\r
+#define lstat lstat64\r
+#define stat stat64\r
+//sys/statvfs.h\r
+#define fstatvfs fstatvfs64\r
+#define statvfs statvfs64\r
+//sys/types.h\r
+#define off_t off64_t\r
+//sys/vfs.h\r
+#define fstatfs fstatfs64\r
+#define statfs statfs64\r
+#endif\r
+\r
+#endif /* ARCHIVE_ANDROID_LF_H_INCLUDED */\r
index 6228fc28d8a1f71f27613f37abbc88e0fef46c4f..371cf4d0d834f56efbc4e8403ac15cd88dd0c09e 100644 (file)
@@ -95,6 +95,11 @@ typedef ssize_t la_ssize_t;
 # endif
 #endif
 
+/* Large file support for Android */
+#ifdef __ANDROID__
+#include "android_lf.h"
+#endif
+
 /*
  * On Windows, define LIBARCHIVE_STATIC if you're building or using a
  * .lib.  The default here assumes you're building a DLL.  Only
index b11a06d5c9a393356ace8df7aab6edbf495ab2c9..5d6927318a8fb213dea061cb50db99235b2f6805 100644 (file)
@@ -75,6 +75,11 @@ typedef int64_t la_int64_t;
 # define       __LA_MODE_T     mode_t
 #endif
 
+/* Large file support for Android */
+#ifdef __ANDROID__
+#include "android_lf.h"
+#endif
+
 /*
  * On Windows, define LIBARCHIVE_STATIC if you're building or using a
  * .lib.  The default here assumes you're building a DLL.  Only
index 3a33c258ee701d96ea0abb9270e291ac4ffdcab0..3b7ff5ffdf61fa7ff16aace8d2438f51d5b3ac07 100644 (file)
@@ -150,7 +150,9 @@ file_skip(struct archive *a, void *client_data, int64_t request)
                        skip = max_skip;
        }
 
-#if HAVE_FSEEKO
+#ifdef __ANDROID__
+       if (lseek(fileno(mine->f), skip, SEEK_CUR) < 0)
+#elif HAVE_FSEEKO
        if (fseeko(mine->f, skip, SEEK_CUR) != 0)
 #elif HAVE__FSEEKI64
        if (_fseeki64(mine->f, skip, SEEK_CUR) != 0)