From 12a4da328a234b171b78cc341544817e9a074057 Mon Sep 17 00:00:00 2001 From: Joe Onorato Date: Fri, 26 Jun 2009 17:18:01 -0400 Subject: [PATCH 1/2] Add an extra null terminator. String8::unlockBuffer is supposed to be doing this, but it's not and I can't figure out why. This makes BackupHelperDispatcher able to read the keys correctly. Also, we weren't writing the data size. --- core/jni/android_backup_BackupHelperDispatcher.cpp | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/core/jni/android_backup_BackupHelperDispatcher.cpp b/core/jni/android_backup_BackupHelperDispatcher.cpp index 24d529bd6f937..2e3f0b969127b 100644 --- a/core/jni/android_backup_BackupHelperDispatcher.cpp +++ b/core/jni/android_backup_BackupHelperDispatcher.cpp @@ -87,6 +87,14 @@ readHeader_native(JNIEnv* env, jobject clazz, jobject headerObj, jobject fdObj) } } +#if 0 + LOGD("chunk header:"); + LOGD(" headerSize=%d", flattenedHeader.headerSize); + LOGD(" version=0x%08x", flattenedHeader.version); + LOGD(" dataSize=%d", flattenedHeader.dataSize); + LOGD(" nameLength=%d", flattenedHeader.nameLength); +#endif + if (flattenedHeader.dataSize < 0 || flattenedHeader.nameLength < 0 || remainingHeader < flattenedHeader.nameLength) { LOGW("Malformed V1 header remainingHeader=%d dataSize=%d nameLength=%d", remainingHeader, @@ -101,13 +109,12 @@ readHeader_native(JNIEnv* env, jobject clazz, jobject headerObj, jobject fdObj) } amt = read(fd, buf, flattenedHeader.nameLength); + buf[flattenedHeader.nameLength] = 0; keyPrefix.unlockBuffer(flattenedHeader.nameLength); remainingHeader -= flattenedHeader.nameLength; - LOGD("remainingHeader=%d", remainingHeader); - if (remainingHeader > 0) { lseek(fd, remainingHeader, SEEK_CUR); } @@ -183,6 +190,7 @@ writeHeader_native(JNIEnv* env, jobject clazz, jobject headerObj, jobject fdObj, header.headerSize = sizeof(chunk_header_v1) + header.nameLength + namePadding; header.version = VERSION_1_HEADER; + header.dataSize = prevPos - (pos + header.headerSize); lseek(fd, pos, SEEK_SET); err = write(fd, &header, sizeof(chunk_header_v1)); From 568bc32344dce841c8f6958f1a65ff839a1b64c0 Mon Sep 17 00:00:00 2001 From: Joe Onorato Date: Fri, 26 Jun 2009 17:19:11 -0400 Subject: [PATCH 2/2] Better (and less) logging from backup. --- libs/utils/BackupData.cpp | 5 ++++- libs/utils/BackupHelpers.cpp | 7 +++++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/libs/utils/BackupData.cpp b/libs/utils/BackupData.cpp index 0868cff6c177c..cce754a082130 100644 --- a/libs/utils/BackupData.cpp +++ b/libs/utils/BackupData.cpp @@ -107,7 +107,10 @@ BackupDataWriter::WriteEntityHeader(const String8& key, size_t dataSize) } else { k = key; } - LOGD("m_keyPrefix=%s key=%s k=%s", m_keyPrefix.string(), key.string(), k.string()); + if (true) { + LOGD("Writing entity: prefix='%s' key='%s' dataSize=%d", m_keyPrefix.string(), key.string(), + dataSize); + } entity_header_v1 header; ssize_t keyLen; diff --git a/libs/utils/BackupHelpers.cpp b/libs/utils/BackupHelpers.cpp index 99a4abcb6e4bc..4ad9b5179532a 100644 --- a/libs/utils/BackupHelpers.cpp +++ b/libs/utils/BackupHelpers.cpp @@ -68,11 +68,15 @@ struct file_metadata_v1 { const static int CURRENT_METADATA_VERSION = 1; -#if 1 // TEST_BACKUP_HELPERS +#if 1 +#define LOGP(f, x...) +#else +#if TEST_BACKUP_HELPERS #define LOGP(f, x...) printf(f "\n", x) #else #define LOGP(x...) LOGD(x) #endif +#endif const static int ROUND_UP[4] = { 0, 3, 2, 1 }; @@ -349,7 +353,6 @@ back_up_files(int oldSnapshotFD, BackupDataWriter* dataStream, int newSnapshotFD err = stat(file, &st); if (err != 0) { - LOGW("Error stating file %s", file); r.deleted = true; } else { r.deleted = false;