diff options
author | Tao Bao <tbao@google.com> | 2017-11-04 15:31:55 +0100 |
---|---|---|
committer | android-build-merger <android-build-merger@google.com> | 2017-11-04 15:31:55 +0100 |
commit | 6d61e2123bbdcde16d9000671e2a25e1f410cf32 (patch) | |
tree | 4625b6af91d462a53bf530c5c6d4b2853b88cb59 /minadbd/fuse_adb_provider.cpp | |
parent | Merge "recovery: remove make_ext4fs from updater" (diff) | |
parent | Merge "Clean up fuse_sideload and add a testcase." (diff) | |
download | android_bootable_recovery-6d61e2123bbdcde16d9000671e2a25e1f410cf32.tar android_bootable_recovery-6d61e2123bbdcde16d9000671e2a25e1f410cf32.tar.gz android_bootable_recovery-6d61e2123bbdcde16d9000671e2a25e1f410cf32.tar.bz2 android_bootable_recovery-6d61e2123bbdcde16d9000671e2a25e1f410cf32.tar.lz android_bootable_recovery-6d61e2123bbdcde16d9000671e2a25e1f410cf32.tar.xz android_bootable_recovery-6d61e2123bbdcde16d9000671e2a25e1f410cf32.tar.zst android_bootable_recovery-6d61e2123bbdcde16d9000671e2a25e1f410cf32.zip |
Diffstat (limited to 'minadbd/fuse_adb_provider.cpp')
-rw-r--r-- | minadbd/fuse_adb_provider.cpp | 53 |
1 files changed, 25 insertions, 28 deletions
diff --git a/minadbd/fuse_adb_provider.cpp b/minadbd/fuse_adb_provider.cpp index 0f4c2563d..9bd3f2392 100644 --- a/minadbd/fuse_adb_provider.cpp +++ b/minadbd/fuse_adb_provider.cpp @@ -14,46 +14,43 @@ * limitations under the License. */ -#include <stdlib.h> +#include "fuse_adb_provider.h" + +#include <errno.h> #include <stdio.h> +#include <stdlib.h> #include <string.h> -#include <errno.h> + +#include <functional> #include "adb.h" #include "adb_io.h" -#include "fuse_adb_provider.h" #include "fuse_sideload.h" -int read_block_adb(void* data, uint32_t block, uint8_t* buffer, uint32_t fetch_size) { - adb_data* ad = reinterpret_cast<adb_data*>(data); - - if (!WriteFdFmt(ad->sfd, "%08u", block)) { - fprintf(stderr, "failed to write to adb host: %s\n", strerror(errno)); - return -EIO; - } +int read_block_adb(const adb_data& ad, uint32_t block, uint8_t* buffer, uint32_t fetch_size) { + if (!WriteFdFmt(ad.sfd, "%08u", block)) { + fprintf(stderr, "failed to write to adb host: %s\n", strerror(errno)); + return -EIO; + } - if (!ReadFdExactly(ad->sfd, buffer, fetch_size)) { - fprintf(stderr, "failed to read from adb host: %s\n", strerror(errno)); - return -EIO; - } - - return 0; -} + if (!ReadFdExactly(ad.sfd, buffer, fetch_size)) { + fprintf(stderr, "failed to read from adb host: %s\n", strerror(errno)); + return -EIO; + } -static void close_adb(void* data) { - adb_data* ad = reinterpret_cast<adb_data*>(data); - WriteFdExactly(ad->sfd, "DONEDONE"); + return 0; } int run_adb_fuse(int sfd, uint64_t file_size, uint32_t block_size) { - adb_data ad; - ad.sfd = sfd; - ad.file_size = file_size; - ad.block_size = block_size; + adb_data ad; + ad.sfd = sfd; + ad.file_size = file_size; + ad.block_size = block_size; - provider_vtab vtab; - vtab.read_block = read_block_adb; - vtab.close = close_adb; + provider_vtab vtab; + vtab.read_block = std::bind(read_block_adb, ad, std::placeholders::_1, std::placeholders::_2, + std::placeholders::_3); + vtab.close = [&ad]() { WriteFdExactly(ad.sfd, "DONEDONE"); }; - return run_fuse_sideload(&vtab, &ad, file_size, block_size); + return run_fuse_sideload(vtab, file_size, block_size); } |