From: dosomder Date: Sun, 13 Mar 2016 16:52:24 +0000 (+0100) Subject: Add large file support for android X-Git-Tag: v3.1.901a~9^2~9^2 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=refs%2Fpull%2F670%2Fhead;p=thirdparty%2Flibarchive.git Add large file support for android Android doesn't support the macro _FILE_OFFSET_BITS=64 however it does support a few file64 functions --- diff --git a/contrib/android/Android.mk b/contrib/android/Android.mk index 436202795..b82beab4a 100644 --- a/contrib/android/Android.mk +++ b/contrib/android/Android.mk @@ -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 index 000000000..3c5475e35 --- /dev/null +++ b/contrib/android/include/android_lf.h @@ -0,0 +1,47 @@ +/* + * Macros for file64 functions + * + * Android does not support the macro _FILE_OFFSET_BITS=64 + * As of android-21 it does however support many file64 functions +*/ + +#ifndef ARCHIVE_ANDROID_LF_H_INCLUDED +#define ARCHIVE_ANDROID_LF_H_INCLUDED + +#if __ANDROID_API__ > 20 + +#include +#include +#include +#include +#include +#include +#include + +//dirent.h +#define readdir_r readdir64_r +#define readdir readdir64 +#define dirent dirent64 +//fcntl.h +#define openat openat64 +#define open open64 +#define mkstemp mkstemp64 +//unistd.h +#define lseek lseek64 +#define ftruncate ftruncate64 +//sys/stat.h +#define fstatat fstatat64 +#define fstat fstat64 +#define lstat lstat64 +#define stat stat64 +//sys/statvfs.h +#define fstatvfs fstatvfs64 +#define statvfs statvfs64 +//sys/types.h +#define off_t off64_t +//sys/vfs.h +#define fstatfs fstatfs64 +#define statfs statfs64 +#endif + +#endif /* ARCHIVE_ANDROID_LF_H_INCLUDED */ diff --git a/libarchive/archive.h b/libarchive/archive.h index 6228fc28d..371cf4d0d 100644 --- a/libarchive/archive.h +++ b/libarchive/archive.h @@ -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 diff --git a/libarchive/archive_entry.h b/libarchive/archive_entry.h index b11a06d5c..5d6927318 100644 --- a/libarchive/archive_entry.h +++ b/libarchive/archive_entry.h @@ -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 diff --git a/libarchive/archive_read_open_file.c b/libarchive/archive_read_open_file.c index 3a33c258e..3b7ff5ffd 100644 --- a/libarchive/archive_read_open_file.c +++ b/libarchive/archive_read_open_file.c @@ -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)