Merge "Move SendLargeFile into SyncConnection." am: ddf41f1ad0 am: 49f4f575f9
am: d88988970c
* commit 'd88988970c72434eda97319882436b40fe348a6b':
Move SendLargeFile into SyncConnection.
diff --git a/adb/file_sync_client.cpp b/adb/file_sync_client.cpp
index ad38369..e109e3e 100644
--- a/adb/file_sync_client.cpp
+++ b/adb/file_sync_client.cpp
@@ -104,8 +104,8 @@
// difference to "adb sync" performance.
bool SendSmallFile(const char* path_and_mode,
const char* rpath,
- const char* data, size_t data_length,
- unsigned mtime) {
+ unsigned mtime,
+ const char* data, size_t data_length) {
Print(rpath);
size_t path_length = strlen(path_and_mode);
@@ -116,8 +116,8 @@
}
std::vector<char> buf(sizeof(SyncRequest) + path_length +
- sizeof(SyncRequest) + data_length +
- sizeof(SyncRequest));
+ sizeof(SyncRequest) + data_length +
+ sizeof(SyncRequest));
char* p = &buf[0];
SyncRequest* req_send = reinterpret_cast<SyncRequest*>(p);
@@ -145,6 +145,68 @@
return true;
}
+ bool SendLargeFile(const char* path_and_mode,
+ const char* lpath, const char* rpath,
+ unsigned mtime) {
+ if (!SendRequest(ID_SEND, path_and_mode)) {
+ Error("failed to send ID_SEND message '%s': %s", path_and_mode, strerror(errno));
+ return false;
+ }
+
+ struct stat st;
+ if (stat(lpath, &st) == -1) {
+ Error("cannot stat '%s': %s", lpath, strerror(errno));
+ return false;
+ }
+
+ uint64_t total_size = st.st_size;
+ uint64_t bytes_copied = 0;
+
+ int lfd = adb_open(lpath, O_RDONLY);
+ if (lfd < 0) {
+ Error("cannot open '%s': %s", lpath, strerror(errno));
+ return false;
+ }
+
+ syncsendbuf sbuf;
+ sbuf.id = ID_DATA;
+ while (true) {
+ int ret = adb_read(lfd, sbuf.data, max);
+ if (ret <= 0) {
+ if (ret < 0) {
+ Error("cannot read '%s': %s", lpath, strerror(errno));
+ adb_close(lfd);
+ return false;
+ }
+ break;
+ }
+
+ sbuf.size = ret;
+ if (!WriteFdExactly(fd, &sbuf, sizeof(unsigned) * 2 + ret)) {
+ adb_close(lfd);
+ return false;
+ }
+ total_bytes += ret;
+
+ bytes_copied += ret;
+
+ int percentage = static_cast<int>(bytes_copied * 100 / total_size);
+ Printf("%s: %d%%", rpath, percentage);
+ }
+
+ adb_close(lfd);
+
+ syncmsg msg;
+ msg.data.id = ID_DONE;
+ msg.data.size = mtime;
+ if (!WriteFdExactly(fd, &msg.data, sizeof(msg.data))) {
+ Error("failed to send ID_DONE message for '%s': %s", rpath, strerror(errno));
+ return false;
+ }
+
+ return true;
+ }
+
bool CopyDone(const char* from, const char* to) {
syncmsg msg;
if (!ReadFdExactly(fd, &msg.status, sizeof(msg.status))) {
@@ -285,68 +347,6 @@
return sc.SendRequest(ID_STAT, path) && sync_finish_stat(sc, timestamp, mode, size);
}
-static bool SendLargeFile(SyncConnection& sc, const char* path_and_mode,
- const char* lpath, const char* rpath,
- unsigned mtime) {
- if (!sc.SendRequest(ID_SEND, path_and_mode)) {
- sc.Error("failed to send ID_SEND message '%s': %s", path_and_mode, strerror(errno));
- return false;
- }
-
- struct stat st;
- if (stat(lpath, &st) == -1) {
- sc.Error("cannot stat '%s': %s", lpath, strerror(errno));
- return false;
- }
-
- uint64_t total_size = st.st_size;
- uint64_t bytes_copied = 0;
-
- int lfd = adb_open(lpath, O_RDONLY);
- if (lfd < 0) {
- sc.Error("cannot open '%s': %s", lpath, strerror(errno));
- return false;
- }
-
- syncsendbuf sbuf;
- sbuf.id = ID_DATA;
- while (true) {
- int ret = adb_read(lfd, sbuf.data, sc.max);
- if (ret <= 0) {
- if (ret < 0) {
- sc.Error("cannot read '%s': %s", lpath, strerror(errno));
- adb_close(lfd);
- return false;
- }
- break;
- }
-
- sbuf.size = ret;
- if (!WriteFdExactly(sc.fd, &sbuf, sizeof(unsigned) * 2 + ret)) {
- adb_close(lfd);
- return false;
- }
- sc.total_bytes += ret;
-
- bytes_copied += ret;
-
- int percentage = static_cast<int>(bytes_copied * 100 / total_size);
- sc.Printf("%s: %d%%", rpath, percentage);
- }
-
- adb_close(lfd);
-
- syncmsg msg;
- msg.data.id = ID_DONE;
- msg.data.size = mtime;
- if (!WriteFdExactly(sc.fd, &msg.data, sizeof(msg.data))) {
- sc.Error("failed to send ID_DONE message for '%s': %s", rpath, strerror(errno));
- return false;
- }
-
- return true;
-}
-
static bool sync_send(SyncConnection& sc, const char* lpath, const char* rpath,
unsigned mtime, mode_t mode)
{
@@ -362,7 +362,7 @@
}
buf[data_length++] = '\0';
- if (!sc.SendSmallFile(path_and_mode.c_str(), rpath, buf, data_length, mtime)) return false;
+ if (!sc.SendSmallFile(path_and_mode.c_str(), rpath, mtime, buf, data_length)) return false;
return sc.CopyDone(lpath, rpath);
#endif
}
@@ -383,11 +383,11 @@
sc.Error("failed to read all of '%s': %s", lpath, strerror(errno));
return false;
}
- if (!sc.SendSmallFile(path_and_mode.c_str(), rpath, data.data(), data.size(), mtime)) {
+ if (!sc.SendSmallFile(path_and_mode.c_str(), rpath, mtime, data.data(), data.size())) {
return false;
}
} else {
- if (!SendLargeFile(sc, path_and_mode.c_str(), lpath, rpath, mtime)) {
+ if (!sc.SendLargeFile(path_and_mode.c_str(), lpath, rpath, mtime)) {
return false;
}
}