summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Christopher Tate <ctate@google.com> 2009-06-24 13:57:29 -0700
committer Christopher Tate <ctate@google.com> 2009-06-24 13:57:29 -0700
commit63bcb79dd437e70593b63cc5a87baab3251c2183 (patch)
tree97eab12039e80d6f16d64e2c3d7dac2073dfae54
parent54118adb3766fdf73a409102b88d7494bb6889a3 (diff)
Only report "unknown metadata" once per restore helper
Also removes the auto-free object, replacing it with direct memory manipulation.
-rw-r--r--include/utils/BackupHelpers.h1
-rw-r--r--libs/utils/BackupHelpers.cpp31
2 files changed, 15 insertions, 17 deletions
diff --git a/include/utils/BackupHelpers.h b/include/utils/BackupHelpers.h
index 759a0cc6d540..b1f504512f51 100644
--- a/include/utils/BackupHelpers.h
+++ b/include/utils/BackupHelpers.h
@@ -137,6 +137,7 @@ public:
private:
void* m_buf;
+ bool m_loggedUnknownMetadata;
KeyedVector<String8,FileRec> m_files;
};
diff --git a/libs/utils/BackupHelpers.cpp b/libs/utils/BackupHelpers.cpp
index b309dbf43e94..99a4abcb6e4b 100644
--- a/libs/utils/BackupHelpers.cpp
+++ b/libs/utils/BackupHelpers.cpp
@@ -68,15 +68,6 @@ struct file_metadata_v1 {
const static int CURRENT_METADATA_VERSION = 1;
-// auto-free buffer management object
-class StAutoFree {
-public:
- StAutoFree(void* buffer) { mBuf = buffer; }
- ~StAutoFree() { free(mBuf); }
-private:
- void* mBuf;
-};
-
#if 1 // TEST_BACKUP_HELPERS
#define LOGP(f, x...) printf(f "\n", x)
#else
@@ -230,8 +221,6 @@ write_update_file(BackupDataWriter* dataStream, int fd, int mode, const String8&
file_metadata_v1 metadata;
char* buf = (char*)malloc(bufsize);
- StAutoFree _autoFree(buf);
-
int crc = crc32(0L, Z_NULL, 0);
@@ -245,6 +234,7 @@ write_update_file(BackupDataWriter* dataStream, int fd, int mode, const String8&
bytesLeft = fileSize + sizeof(metadata);
err = dataStream->WriteEntityHeader(key, bytesLeft);
if (err != 0) {
+ free(buf);
return err;
}
@@ -254,6 +244,7 @@ write_update_file(BackupDataWriter* dataStream, int fd, int mode, const String8&
metadata.undefined_1 = metadata.undefined_2 = 0;
err = dataStream->WriteEntityData(&metadata, sizeof(metadata));
if (err != 0) {
+ free(buf);
return err;
}
bytesLeft -= sizeof(metadata); // bytesLeft should == fileSize now
@@ -266,6 +257,7 @@ write_update_file(BackupDataWriter* dataStream, int fd, int mode, const String8&
}
err = dataStream->WriteEntityData(buf, amt);
if (err != 0) {
+ free(buf);
return err;
}
}
@@ -279,6 +271,7 @@ write_update_file(BackupDataWriter* dataStream, int fd, int mode, const String8&
bytesLeft -= amt;
err = dataStream->WriteEntityData(buf, amt);
if (err != 0) {
+ free(buf);
return err;
}
}
@@ -287,6 +280,7 @@ write_update_file(BackupDataWriter* dataStream, int fd, int mode, const String8&
" You aren't doing proper locking!", realFilename, fileSize, fileSize-bytesLeft);
}
+ free(buf);
return NO_ERROR;
}
@@ -318,8 +312,6 @@ compute_crc32(int fd)
int amt;
char* buf = (char*)malloc(bufsize);
- StAutoFree _autoFree(buf);
-
int crc = crc32(0L, Z_NULL, 0);
lseek(fd, 0, SEEK_SET);
@@ -328,6 +320,7 @@ compute_crc32(int fd)
crc = crc32(crc, (Bytef*)buf, amt);
}
+ free(buf);
return crc;
}
@@ -451,6 +444,7 @@ back_up_files(int oldSnapshotFD, BackupDataWriter* dataStream, int newSnapshotFD
RestoreHelperBase::RestoreHelperBase()
{
m_buf = malloc(RESTORE_BUF_SIZE);
+ m_loggedUnknownMetadata = false;
}
RestoreHelperBase::~RestoreHelperBase()
@@ -489,8 +483,11 @@ RestoreHelperBase::WriteFile(const String8& filename, BackupDataReader* in)
metadata.version = fromlel(metadata.version);
metadata.mode = fromlel(metadata.mode);
if (metadata.version > CURRENT_METADATA_VERSION) {
- LOGW("Restoring file with unsupported metadata version %d (currently %d)",
- metadata.version, CURRENT_METADATA_VERSION);
+ if (!m_loggedUnknownMetadata) {
+ m_loggedUnknownMetadata = true;
+ LOGW("Restoring file with unsupported metadata version %d (currently %d)",
+ metadata.version, CURRENT_METADATA_VERSION);
+ }
}
mode = metadata.mode;
@@ -587,7 +584,6 @@ compare_file(const char* path, const unsigned char* data, int len)
fprintf(stderr, "malloc(%d) failed\n", len);
return ENOMEM;
}
- StAutoFree _autoFree(contents);
bool sizesMatch = true;
amt = lseek(fd, 0, SEEK_END);
@@ -614,6 +610,7 @@ compare_file(const char* path, const unsigned char* data, int len)
}
}
+ free(contents);
return contentsMatch && sizesMatch ? 0 : 1;
}
@@ -919,7 +916,6 @@ test_read_header_and_entity(BackupDataReader& reader, const char* str)
int err;
int bufSize = strlen(str)+1;
char* buf = (char*)malloc(bufSize);
- StAutoFree _autoFree(buf);
String8 string;
int cookie = 0x11111111;
size_t actualSize;
@@ -981,6 +977,7 @@ finished:
if (err != NO_ERROR) {
fprintf(stderr, "test_read_header_and_entity failed with %s\n", strerror(err));
}
+ free(buf);
return err;
}