summaryrefslogtreecommitdiffstats
path: root/libs
diff options
context:
space:
mode:
authorChristopher Tate <ctate@google.com>2011-06-08 20:09:31 -0700
committerChristopher Tate <ctate@google.com>2011-06-08 20:11:49 -0700
commite9e78ecd2c0ae5f48ed81fdfff4a89cb803fc409 (patch)
tree2da70dfa7ba568ce511e75ad674aa59c4d14f042 /libs
parent0a251cd5ee8bbd8e787a1d17ddbe7f9524a9e313 (diff)
downloadframeworks_base-e9e78ecd2c0ae5f48ed81fdfff4a89cb803fc409.zip
frameworks_base-e9e78ecd2c0ae5f48ed81fdfff4a89cb803fc409.tar.gz
frameworks_base-e9e78ecd2c0ae5f48ed81fdfff4a89cb803fc409.tar.bz2
Fix handling of directory entries
Don't emit tar blocks for directories with an invalid nonzero size. Also, if such an entry is encountered during restore, don't actually attempt to treat it as valid and thus skip over the next actual tar entry. This patch also adds tracking of the data actually consumed during restore, and reports a total at the end of stream. Change-Id: I625173f76df3c007e899209101ff2b587841f184
Diffstat (limited to 'libs')
-rw-r--r--libs/utils/BackupHelpers.cpp1
1 files changed, 1 insertions, 0 deletions
diff --git a/libs/utils/BackupHelpers.cpp b/libs/utils/BackupHelpers.cpp
index f933199..87549fe 100644
--- a/libs/utils/BackupHelpers.cpp
+++ b/libs/utils/BackupHelpers.cpp
@@ -525,6 +525,7 @@ int write_tarfile(const String8& packageName, const String8& domain,
String8 prefix;
const int isdir = S_ISDIR(s.st_mode);
+ if (isdir) s.st_size = 0; // directories get no actual data in the tar stream
// !!! TODO: use mmap when possible to avoid churning the buffer cache
// !!! TODO: this will break with symlinks; need to use readlink(2)