summaryrefslogtreecommitdiffstats
path: root/fastboot/fastboot.cpp
diff options
context:
space:
mode:
authorElliott Hughes <enh@google.com>2015-03-19 17:39:57 +0000
committerAndroid Git Automerger <android-git-automerger@android.com>2015-03-19 17:39:57 +0000
commit787ed98d683cd16faa5d87bb4a4137cc0cb0eff4 (patch)
tree558da2c1ea74e68379aaf34ff4c3b4585260fb6b /fastboot/fastboot.cpp
parentf13a1d57c8a9de266cdbddbfe2c8961d5fb55b57 (diff)
parentf99e47a0a0604aef2f3b1d07953d5f220662353c (diff)
downloadsystem_core-787ed98d683cd16faa5d87bb4a4137cc0cb0eff4.zip
system_core-787ed98d683cd16faa5d87bb4a4137cc0cb0eff4.tar.gz
system_core-787ed98d683cd16faa5d87bb4a4137cc0cb0eff4.tar.bz2
am f99e47a0: am 445e5ede: Merge "Switch fastboot to libziparchive."
* commit 'f99e47a0a0604aef2f3b1d07953d5f220662353c': Switch fastboot to libziparchive.
Diffstat (limited to 'fastboot/fastboot.cpp')
-rw-r--r--fastboot/fastboot.cpp42
1 files changed, 18 insertions, 24 deletions
diff --git a/fastboot/fastboot.cpp b/fastboot/fastboot.cpp
index e2e9660..48d980a 100644
--- a/fastboot/fastboot.cpp
+++ b/fastboot/fastboot.cpp
@@ -45,7 +45,7 @@
#include <unistd.h>
#include <sparse/sparse.h>
-#include <zipfile/zipfile.h>
+#include <ziparchive/zip_archive.h>
#include "bootimg_utils.h"
#include "fastboot.h"
@@ -369,29 +369,24 @@ void *load_bootable_image(const char *kernel, const char *ramdisk,
return bdata;
}
-static void *unzip_file(zipfile_t zip, const char *name, unsigned *sz)
+static void *unzip_file(ZipArchiveHandle zip, const char *name, unsigned *sz)
{
- void *data;
- zipentry_t entry;
- unsigned datasz;
-
- entry = lookup_zipentry(zip, name);
- if (entry == NULL) {
+ ZipEntryName zip_entry_name(name);
+ ZipEntry zip_entry;
+ if (FindEntry(zip, zip_entry_name, &zip_entry) != 0) {
fprintf(stderr, "archive does not contain '%s'\n", name);
return 0;
}
- *sz = get_zipentry_size(entry);
+ *sz = zip_entry.uncompressed_length;
- datasz = *sz * 1.001;
- data = malloc(datasz);
-
- if(data == 0) {
+ uint8_t* data = reinterpret_cast<uint8_t*>(malloc(zip_entry.uncompressed_length));
+ if (data == NULL) {
fprintf(stderr, "failed to allocate %d bytes\n", *sz);
return 0;
}
- if (decompress_zipentry(entry, data, datasz)) {
+ if (ExtractToMemory(zip, &zip_entry, data, zip_entry.uncompressed_length) != 0) {
fprintf(stderr, "failed to unzip '%s' from archive\n", name);
free(data);
return 0;
@@ -400,7 +395,7 @@ static void *unzip_file(zipfile_t zip, const char *name, unsigned *sz)
return data;
}
-static int unzip_to_file(zipfile_t zip, char *name)
+static int unzip_to_file(ZipArchiveHandle zip, char *name)
{
int fd = fileno(tmpfile());
if (fd < 0) {
@@ -683,11 +678,10 @@ void do_flash(usb_handle *usb, const char *pname, const char *fname)
flash_buf(pname, &buf);
}
-void do_update_signature(zipfile_t zip, char *fn)
+void do_update_signature(ZipArchiveHandle zip, char *fn)
{
- void *data;
unsigned sz;
- data = unzip_file(zip, fn, &sz);
+ void* data = unzip_file(zip, fn, &sz);
if (data == 0) return;
fb_queue_download("signature", data, sz);
fb_queue_command("signature", "installing signature");
@@ -699,12 +693,10 @@ void do_update(usb_handle *usb, const char *filename, int erase_first)
fb_queue_query_save("product", cur_product, sizeof(cur_product));
- unsigned zsize;
- void* zdata = load_file(filename, &zsize);
- if (zdata == 0) die("failed to load '%s': %s", filename, strerror(errno));
-
- zipfile_t zip = init_zipfile(zdata, zsize);
- if (zip == 0) die("failed to access zipdata in '%s'");
+ ZipArchiveHandle zip;
+ if (OpenArchive(filename, &zip) != 0) {
+ die("failed to open zip file '%s': %s", filename, strerror(errno));
+ }
unsigned sz;
void* data = unzip_file(zip, "android-info.txt", &sz);
@@ -740,6 +732,8 @@ void do_update(usb_handle *usb, const char *filename, int erase_first)
* program exits.
*/
}
+
+ CloseArchive(zip);
}
void do_send_signature(char *fn)