summaryrefslogtreecommitdiffstats
path: root/minadbd/fuse_adb_provider.cpp
diff options
context:
space:
mode:
authorTao Bao <tbao@google.com>2017-05-02 00:57:38 +0200
committerTao Bao <tbao@google.com>2017-11-04 02:30:41 +0100
commit91a7aa4577feb5f80038a30d15765e8b79845cf1 (patch)
tree9ecb91bec8c5ad34382a5b3d24f36274e9be7aaa /minadbd/fuse_adb_provider.cpp
parentMerge "recovery: fix library dependency" (diff)
downloadandroid_bootable_recovery-91a7aa4577feb5f80038a30d15765e8b79845cf1.tar
android_bootable_recovery-91a7aa4577feb5f80038a30d15765e8b79845cf1.tar.gz
android_bootable_recovery-91a7aa4577feb5f80038a30d15765e8b79845cf1.tar.bz2
android_bootable_recovery-91a7aa4577feb5f80038a30d15765e8b79845cf1.tar.lz
android_bootable_recovery-91a7aa4577feb5f80038a30d15765e8b79845cf1.tar.xz
android_bootable_recovery-91a7aa4577feb5f80038a30d15765e8b79845cf1.tar.zst
android_bootable_recovery-91a7aa4577feb5f80038a30d15765e8b79845cf1.zip
Diffstat (limited to 'minadbd/fuse_adb_provider.cpp')
-rw-r--r--minadbd/fuse_adb_provider.cpp53
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);
}