From e97e66ea7c624190afa4639d6ddc60e7d013f46c Mon Sep 17 00:00:00 2001 From: Narayan Kamath Date: Mon, 27 Apr 2015 16:25:53 +0100 Subject: [PATCH] Use base::WriteFully in zip_archive. We're already linking against libbase but we'll have to add a libbase dependency to every target that includes libziparchive as a STATIC_LIBRARY dependency, given that there's no way to express that what we want (except by adding a LOCAL_WHOLE_STATIC_LIBRARY dependency on libbase to libziparchive but that seems bad too) Change-Id: I294ad389a9c61a1134a7bc323da25b0004a8f1e0 --- fastboot/Android.mk | 3 ++- libziparchive/zip_archive.cc | 23 +++++++---------------- 2 files changed, 9 insertions(+), 17 deletions(-) diff --git a/fastboot/Android.mk b/fastboot/Android.mk index 7b2975b7f..dee471a33 100644 --- a/fastboot/Android.mk +++ b/fastboot/Android.mk @@ -58,7 +58,8 @@ LOCAL_STATIC_LIBRARIES := \ libsparse_host \ libutils \ liblog \ - libz + libz \ + libbase ifneq ($(HOST_OS),windows) LOCAL_STATIC_LIBRARIES += libselinux diff --git a/libziparchive/zip_archive.cc b/libziparchive/zip_archive.cc index 34131f1be..79c4c53c7 100644 --- a/libziparchive/zip_archive.cc +++ b/libziparchive/zip_archive.cc @@ -30,6 +30,7 @@ #include #include +#include "base/file.h" #include "base/macros.h" // TEMP_FAILURE_RETRY may or may not be in unistd #include "base/memory.h" #include "log/log.h" @@ -1033,24 +1034,14 @@ class FileWriter : public Writer { return false; } - // Keep track of the start position so we can calculate the - // total number of bytes written. - const uint8_t* const start = buf; - while (buf_size > 0) { - ssize_t bytes_written = TEMP_FAILURE_RETRY(write(fd_, buf, buf_size)); - if (bytes_written == -1) { - ALOGW("Zip: unable to write " ZD " bytes to file; %s", buf_size, strerror(errno)); - return false; - } - - buf_size -= bytes_written; - buf += bytes_written; + const bool result = android::base::WriteFully(fd_, buf, buf_size); + if (result) { + total_bytes_written_ += buf_size; + } else { + ALOGW("Zip: unable to write " ZD " bytes to file; %s", buf_size, strerror(errno)); } - total_bytes_written_ += static_cast( - reinterpret_cast(buf) - reinterpret_cast(start)); - - return true; + return result; } private: FileWriter(const int fd, const size_t declared_length) :