diff options
Diffstat (limited to 'adb/file_sync_client.cpp')
-rw-r--r-- | adb/file_sync_client.cpp | 21 |
1 files changed, 17 insertions, 4 deletions
diff --git a/adb/file_sync_client.cpp b/adb/file_sync_client.cpp index e109e3eef4..c422b4f193 100644 --- a/adb/file_sync_client.cpp +++ b/adb/file_sync_client.cpp @@ -190,8 +190,15 @@ class SyncConnection { bytes_copied += ret; - int percentage = static_cast<int>(bytes_copied * 100 / total_size); - Printf("%s: %d%%", rpath, percentage); + if (total_size == 0) { + // This case can happen if we're racing against something that wrote to the file + // between our stat and our read, or if we're reading a magic file that lies about + // its size. + Printf("%s: ?%%", rpath); + } else { + int percentage = static_cast<int>(bytes_copied * 100 / total_size); + Printf("%s: %d%%", rpath, percentage); + } } adb_close(lfd); @@ -458,8 +465,14 @@ static bool sync_recv(SyncConnection& sc, const char* rpath, const char* lpath) bytes_copied += msg.data.size; - int percentage = static_cast<int>(bytes_copied * 100 / size); - sc.Printf("%s: %d%%", rpath, percentage); + if (size == 0) { + // This case can happen if we're racing against something that wrote to the file between + // our stat and our read, or if we're reading a magic file that lies about its size. + sc.Printf("%s: ?%%", rpath); + } else { + int percentage = static_cast<int>(bytes_copied * 100 / size); + sc.Printf("%s: %d%%", rpath, percentage); + } } adb_close(lfd); |