Merge change 5243 into donut

* changes:
  Only report "unknown metadata" once per restore helper
This commit is contained in:
Android (Google) Code Review
2009-06-24 13:58:52 -07:00
2 changed files with 15 additions and 17 deletions

View File

@@ -137,6 +137,7 @@ public:
private: private:
void* m_buf; void* m_buf;
bool m_loggedUnknownMetadata;
KeyedVector<String8,FileRec> m_files; KeyedVector<String8,FileRec> m_files;
}; };

View File

@@ -68,15 +68,6 @@ struct file_metadata_v1 {
const static int CURRENT_METADATA_VERSION = 1; 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 #if 1 // TEST_BACKUP_HELPERS
#define LOGP(f, x...) printf(f "\n", x) #define LOGP(f, x...) printf(f "\n", x)
#else #else
@@ -230,8 +221,6 @@ write_update_file(BackupDataWriter* dataStream, int fd, int mode, const String8&
file_metadata_v1 metadata; file_metadata_v1 metadata;
char* buf = (char*)malloc(bufsize); char* buf = (char*)malloc(bufsize);
StAutoFree _autoFree(buf);
int crc = crc32(0L, Z_NULL, 0); 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); bytesLeft = fileSize + sizeof(metadata);
err = dataStream->WriteEntityHeader(key, bytesLeft); err = dataStream->WriteEntityHeader(key, bytesLeft);
if (err != 0) { if (err != 0) {
free(buf);
return err; return err;
} }
@@ -254,6 +244,7 @@ write_update_file(BackupDataWriter* dataStream, int fd, int mode, const String8&
metadata.undefined_1 = metadata.undefined_2 = 0; metadata.undefined_1 = metadata.undefined_2 = 0;
err = dataStream->WriteEntityData(&metadata, sizeof(metadata)); err = dataStream->WriteEntityData(&metadata, sizeof(metadata));
if (err != 0) { if (err != 0) {
free(buf);
return err; return err;
} }
bytesLeft -= sizeof(metadata); // bytesLeft should == fileSize now 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); err = dataStream->WriteEntityData(buf, amt);
if (err != 0) { if (err != 0) {
free(buf);
return err; return err;
} }
} }
@@ -279,6 +271,7 @@ write_update_file(BackupDataWriter* dataStream, int fd, int mode, const String8&
bytesLeft -= amt; bytesLeft -= amt;
err = dataStream->WriteEntityData(buf, amt); err = dataStream->WriteEntityData(buf, amt);
if (err != 0) { if (err != 0) {
free(buf);
return err; 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); " You aren't doing proper locking!", realFilename, fileSize, fileSize-bytesLeft);
} }
free(buf);
return NO_ERROR; return NO_ERROR;
} }
@@ -318,8 +312,6 @@ compute_crc32(int fd)
int amt; int amt;
char* buf = (char*)malloc(bufsize); char* buf = (char*)malloc(bufsize);
StAutoFree _autoFree(buf);
int crc = crc32(0L, Z_NULL, 0); int crc = crc32(0L, Z_NULL, 0);
lseek(fd, 0, SEEK_SET); lseek(fd, 0, SEEK_SET);
@@ -328,6 +320,7 @@ compute_crc32(int fd)
crc = crc32(crc, (Bytef*)buf, amt); crc = crc32(crc, (Bytef*)buf, amt);
} }
free(buf);
return crc; return crc;
} }
@@ -451,6 +444,7 @@ back_up_files(int oldSnapshotFD, BackupDataWriter* dataStream, int newSnapshotFD
RestoreHelperBase::RestoreHelperBase() RestoreHelperBase::RestoreHelperBase()
{ {
m_buf = malloc(RESTORE_BUF_SIZE); m_buf = malloc(RESTORE_BUF_SIZE);
m_loggedUnknownMetadata = false;
} }
RestoreHelperBase::~RestoreHelperBase() RestoreHelperBase::~RestoreHelperBase()
@@ -489,9 +483,12 @@ RestoreHelperBase::WriteFile(const String8& filename, BackupDataReader* in)
metadata.version = fromlel(metadata.version); metadata.version = fromlel(metadata.version);
metadata.mode = fromlel(metadata.mode); metadata.mode = fromlel(metadata.mode);
if (metadata.version > CURRENT_METADATA_VERSION) { if (metadata.version > CURRENT_METADATA_VERSION) {
if (!m_loggedUnknownMetadata) {
m_loggedUnknownMetadata = true;
LOGW("Restoring file with unsupported metadata version %d (currently %d)", LOGW("Restoring file with unsupported metadata version %d (currently %d)",
metadata.version, CURRENT_METADATA_VERSION); metadata.version, CURRENT_METADATA_VERSION);
} }
}
mode = metadata.mode; mode = metadata.mode;
// Write the file and compute the crc // Write the file and compute the crc
@@ -587,7 +584,6 @@ compare_file(const char* path, const unsigned char* data, int len)
fprintf(stderr, "malloc(%d) failed\n", len); fprintf(stderr, "malloc(%d) failed\n", len);
return ENOMEM; return ENOMEM;
} }
StAutoFree _autoFree(contents);
bool sizesMatch = true; bool sizesMatch = true;
amt = lseek(fd, 0, SEEK_END); 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; return contentsMatch && sizesMatch ? 0 : 1;
} }
@@ -919,7 +916,6 @@ test_read_header_and_entity(BackupDataReader& reader, const char* str)
int err; int err;
int bufSize = strlen(str)+1; int bufSize = strlen(str)+1;
char* buf = (char*)malloc(bufSize); char* buf = (char*)malloc(bufSize);
StAutoFree _autoFree(buf);
String8 string; String8 string;
int cookie = 0x11111111; int cookie = 0x11111111;
size_t actualSize; size_t actualSize;
@@ -981,6 +977,7 @@ finished:
if (err != NO_ERROR) { if (err != NO_ERROR) {
fprintf(stderr, "test_read_header_and_entity failed with %s\n", strerror(err)); fprintf(stderr, "test_read_header_and_entity failed with %s\n", strerror(err));
} }
free(buf);
return err; return err;
} }