diff options
-rw-r--r-- | libziparchive/Android.mk | 10 | ||||
-rw-r--r-- | libziparchive/zip_archive.cc | 33 |
2 files changed, 21 insertions, 22 deletions
diff --git a/libziparchive/Android.mk b/libziparchive/Android.mk index 0d31001..a3087ee 100644 --- a/libziparchive/Android.mk +++ b/libziparchive/Android.mk @@ -21,7 +21,7 @@ include $(CLEAR_VARS) LOCAL_CPP_EXTENSION := .cc LOCAL_SRC_FILES := ${source_files} LOCAL_STATIC_LIBRARIES := libz -LOCAL_SHARED_LIBRARIES := libutils +LOCAL_SHARED_LIBRARIES := libutils libbase LOCAL_MODULE:= libziparchive LOCAL_CFLAGS := -Werror -Wall LOCAL_CPPFLAGS := -Wold-style-cast @@ -30,7 +30,7 @@ include $(BUILD_STATIC_LIBRARY) include $(CLEAR_VARS) LOCAL_CPP_EXTENSION := .cc LOCAL_SRC_FILES := ${source_files} -LOCAL_STATIC_LIBRARIES := libz libutils +LOCAL_STATIC_LIBRARIES := libz libutils libbase LOCAL_MODULE:= libziparchive-host LOCAL_CFLAGS := -Werror ifneq ($(strip $(USE_MINGW)),) @@ -43,7 +43,7 @@ include $(CLEAR_VARS) LOCAL_CPP_EXTENSION := .cc LOCAL_SRC_FILES := ${source_files} LOCAL_STATIC_LIBRARIES := libz libutils -LOCAL_SHARED_LIBRARIES := liblog +LOCAL_SHARED_LIBRARIES := liblog libbase LOCAL_MODULE:= libziparchive-host LOCAL_CFLAGS := -Werror LOCAL_MULTILIB := both @@ -55,7 +55,7 @@ LOCAL_MODULE := ziparchive-tests LOCAL_CPP_EXTENSION := .cc LOCAL_CFLAGS := -Werror LOCAL_SRC_FILES := zip_archive_test.cc entry_name_utils_test.cc -LOCAL_SHARED_LIBRARIES := liblog +LOCAL_SHARED_LIBRARIES := liblog libbase LOCAL_STATIC_LIBRARIES := libziparchive libz libutils include $(BUILD_NATIVE_TEST) @@ -66,7 +66,7 @@ LOCAL_CFLAGS += \ -Werror \ -Wno-unnamed-type-template-args LOCAL_SRC_FILES := zip_archive_test.cc entry_name_utils_test.cc -LOCAL_SHARED_LIBRARIES := libziparchive-host liblog +LOCAL_SHARED_LIBRARIES := libziparchive-host liblog libbase LOCAL_STATIC_LIBRARIES := \ libz \ libutils diff --git a/libziparchive/zip_archive.cc b/libziparchive/zip_archive.cc index 58285f1..57c46a3 100644 --- a/libziparchive/zip_archive.cc +++ b/libziparchive/zip_archive.cc @@ -18,27 +18,29 @@ * Read-only access to Zip archives, with minimal heap allocation. */ -#include <memory> -#include <vector> - #include <assert.h> #include <errno.h> #include <fcntl.h> #include <inttypes.h> #include <limits.h> -#include <log/log.h> #include <stdlib.h> #include <string.h> #include <unistd.h> -#include <utils/Compat.h> -#include <utils/FileMap.h> -#include <zlib.h> -#include <JNIHelp.h> // TEMP_FAILURE_RETRY may or may not be in unistd +#include <memory> +#include <vector> + +#include "base/macros.h" // TEMP_FAILURE_RETRY may or may not be in unistd +#include "base/memory.h" +#include "log/log.h" +#include "utils/Compat.h" +#include "utils/FileMap.h" +#include "zlib.h" #include "entry_name_utils-inl.h" #include "ziparchive/zip_archive.h" +using android::base::get_unaligned; // This is for windows. If we don't open a file in binary mode, weird // things will happen. @@ -46,11 +48,6 @@ #define O_BINARY 0 #endif -#define DISALLOW_IMPLICIT_CONSTRUCTORS(TypeName) \ - TypeName(); \ - TypeName(const TypeName&); \ - void operator=(const TypeName&) - // The "end of central directory" (EOCD) record. Each archive // contains exactly once such record which appears at the end of // the archive. It contains archive wide information like the @@ -462,10 +459,12 @@ static int32_t MapCentralDirectory0(int fd, const char* debug_file_name, */ int i = read_amount - sizeof(EocdRecord); for (; i >= 0; i--) { - if (scan_buffer[i] == 0x50 && - ((*reinterpret_cast<uint32_t*>(&scan_buffer[i])) == EocdRecord::kSignature)) { - ALOGV("+++ Found EOCD at buf+%d", i); - break; + if (scan_buffer[i] == 0x50) { + uint32_t* sig_addr = reinterpret_cast<uint32_t*>(&scan_buffer[i]); + if (get_unaligned<uint32_t>(sig_addr) == EocdRecord::kSignature) { + ALOGV("+++ Found EOCD at buf+%d", i); + break; + } } } if (i < 0) { |