diff options
author | Josh Gao <jmgao@google.com> | 2016-11-17 16:02:36 -0800 |
---|---|---|
committer | Josh Gao <jmgao@google.com> | 2016-11-17 16:17:07 -0800 |
commit | da1f279509dc11b436818d0ef0b0bfb49d147fa0 (patch) | |
tree | 990d856e156122d2f929735bb0b646eac44bdecb /adb/file_sync_client.cpp | |
parent | e631e470e059d84388f3aacfe11a3fa60a584ba7 (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.cpp | 2 |
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%. |