diff --git a/fastboot/Android.bp b/fastboot/Android.bp index 8e98e9fd5..720810d05 100644 --- a/fastboot/Android.bp +++ b/fastboot/Android.bp @@ -76,6 +76,7 @@ cc_library_host_static { header_libs: [ "bootimg_headers", + "libstorage_literals_headers", ], export_header_lib_headers: [ @@ -275,6 +276,9 @@ cc_library_host_static { // Only version the final binaries use_version_lib: false, static_libs: ["libbuildversion"], + header_libs: [ + "libstorage_literals_headers", + ], generated_headers: ["platform_tools_version"], diff --git a/fastboot/fastboot_driver.cpp b/fastboot/fastboot_driver.cpp index 79305c414..a516a9130 100644 --- a/fastboot/fastboot_driver.cpp +++ b/fastboot/fastboot_driver.cpp @@ -45,11 +45,13 @@ #include #include #include +#include #include "constants.h" #include "transport.h" using android::base::StringPrintf; +using namespace android::storage_literals; namespace fastboot { @@ -316,12 +318,20 @@ RetCode FastBootDriver::RunAndReadBuffer( return BAD_DEV_RESP; } - std::vector data(dsize); - if ((ret = ReadBuffer(data.data(), data.size())) != SUCCESS) { - return ret; - } - if ((ret = write_fn(data.data(), data.size())) != SUCCESS) { - return ret; + const uint64_t total_size = dsize; + const uint64_t buf_size = std::min(total_size, 1_MiB); + std::vector data(buf_size); + uint64_t current_offset = 0; + while (current_offset < total_size) { + uint64_t remaining = total_size - current_offset; + uint64_t chunk_size = std::min(buf_size, remaining); + if ((ret = ReadBuffer(data.data(), chunk_size)) != SUCCESS) { + return ret; + } + if ((ret = write_fn(data.data(), chunk_size)) != SUCCESS) { + return ret; + } + current_offset += chunk_size; } return HandleResponse(response, info); } diff --git a/fs_mgr/libstorage_literals/Android.bp b/fs_mgr/libstorage_literals/Android.bp index 635ca498c..5b0716851 100644 --- a/fs_mgr/libstorage_literals/Android.bp +++ b/fs_mgr/libstorage_literals/Android.bp @@ -8,4 +8,9 @@ cc_library_headers { host_supported: true, recovery_available: true, export_include_dirs: ["."], + target: { + windows: { + enabled: true, + }, + }, }