summaryrefslogtreecommitdiff
path: root/adb/file_sync_client.cpp
diff options
context:
space:
mode:
authorJosh Gao <jmgao@google.com>2016-11-17 16:02:36 -0800
committerJosh Gao <jmgao@google.com>2016-11-17 16:17:07 -0800
commitda1f279509dc11b436818d0ef0b0bfb49d147fa0 (patch)
tree990d856e156122d2f929735bb0b646eac44bdecb /adb/file_sync_client.cpp
parente631e470e059d84388f3aacfe11a3fa60a584ba7 (diff)
adb: fix progress percentage when pulling symlinks.
The adb protocol currently only supports lstat with no way of finding the target of a symlink, so pulling a symlink that points to a file looks like pulling a file with length equal to the length of path to the symlink's target. Pulling a file that's sufficiently large can overflow the int used to calculate percentage, and result in a bogus completion percentage being displayed. Bug: http://b/29277448 Test: adb pull /dev/block/platform/soc.0/f9824900.sdhci/by-name/system Change-Id: I42d180550ac2aa9e4705676ccbb20f5db789fb8d
Diffstat (limited to 'adb/file_sync_client.cpp')
-rw-r--r--adb/file_sync_client.cpp2
1 files changed, 1 insertions, 1 deletions
diff --git a/adb/file_sync_client.cpp b/adb/file_sync_client.cpp
index f1e4179c32..115095c9a1 100644
--- a/adb/file_sync_client.cpp
+++ b/adb/file_sync_client.cpp
@@ -149,7 +149,7 @@ struct TransferLedger {
void ReportProgress(LinePrinter& lp, const std::string& file, uint64_t file_copied_bytes,
uint64_t file_total_bytes) {
char overall_percentage_str[5] = "?";
- if (bytes_expected != 0) {
+ if (bytes_expected != 0 && bytes_transferred <= bytes_expected) {
int overall_percentage = static_cast<int>(bytes_transferred * 100 / bytes_expected);
// If we're pulling symbolic links, we'll pull the target of the link rather than
// just create a local link, and that will cause us to go over 100%.