backup.cpp revision d2110dbce071a236b6176de344ca797b737542eb
1d2110dbce071a236b6176de344ca797b737542ebJoe Onorato 2d2110dbce071a236b6176de344ca797b737542ebJoe Onorato#include <utils/backup_helpers.h> 3d2110dbce071a236b6176de344ca797b737542ebJoe Onorato#include <utils/String8.h> 4d2110dbce071a236b6176de344ca797b737542ebJoe Onorato 5d2110dbce071a236b6176de344ca797b737542ebJoe Onorato#include <fcntl.h> 6d2110dbce071a236b6176de344ca797b737542ebJoe Onorato#include <stdio.h> 7d2110dbce071a236b6176de344ca797b737542ebJoe Onorato#include <string.h> 8d2110dbce071a236b6176de344ca797b737542ebJoe Onorato 9d2110dbce071a236b6176de344ca797b737542ebJoe Onoratousing namespace android; 10d2110dbce071a236b6176de344ca797b737542ebJoe Onorato 11d2110dbce071a236b6176de344ca797b737542ebJoe Onorato#include <unistd.h> 12d2110dbce071a236b6176de344ca797b737542ebJoe Onorato 13d2110dbce071a236b6176de344ca797b737542ebJoe Onoratoint 14d2110dbce071a236b6176de344ca797b737542ebJoe Onoratousage(int argc, const char** argv) 15d2110dbce071a236b6176de344ca797b737542ebJoe Onorato{ 16d2110dbce071a236b6176de344ca797b737542ebJoe Onorato const char* p = argv[0]; 17d2110dbce071a236b6176de344ca797b737542ebJoe Onorato 18d2110dbce071a236b6176de344ca797b737542ebJoe Onorato fprintf(stderr, "%s: Backs up your data.\n" 19d2110dbce071a236b6176de344ca797b737542ebJoe Onorato "\n" 20d2110dbce071a236b6176de344ca797b737542ebJoe Onorato "usage: %s\n" 21d2110dbce071a236b6176de344ca797b737542ebJoe Onorato " Prints all of the data that can be backed up to stdout.\n" 22d2110dbce071a236b6176de344ca797b737542ebJoe Onorato "\n" 23d2110dbce071a236b6176de344ca797b737542ebJoe Onorato "usage: %s list FILE\n" 24d2110dbce071a236b6176de344ca797b737542ebJoe Onorato " Lists the backup entities in the file.\n" 25d2110dbce071a236b6176de344ca797b737542ebJoe Onorato "\n" 26d2110dbce071a236b6176de344ca797b737542ebJoe Onorato "usage: %s print NAME FILE\n" 27d2110dbce071a236b6176de344ca797b737542ebJoe Onorato " Prints the entity named NAME in FILE.\n", 28d2110dbce071a236b6176de344ca797b737542ebJoe Onorato p, p, p, p); 29d2110dbce071a236b6176de344ca797b737542ebJoe Onorato return 1; 30d2110dbce071a236b6176de344ca797b737542ebJoe Onorato} 31d2110dbce071a236b6176de344ca797b737542ebJoe Onorato 32d2110dbce071a236b6176de344ca797b737542ebJoe Onoratoint 33d2110dbce071a236b6176de344ca797b737542ebJoe Onoratoperform_full_backup() 34d2110dbce071a236b6176de344ca797b737542ebJoe Onorato{ 35d2110dbce071a236b6176de344ca797b737542ebJoe Onorato printf("this would have written all of your data to stdout\n"); 36d2110dbce071a236b6176de344ca797b737542ebJoe Onorato return 0; 37d2110dbce071a236b6176de344ca797b737542ebJoe Onorato} 38d2110dbce071a236b6176de344ca797b737542ebJoe Onorato 39d2110dbce071a236b6176de344ca797b737542ebJoe Onoratoint 40d2110dbce071a236b6176de344ca797b737542ebJoe Onoratoperform_list(const char* filename) 41d2110dbce071a236b6176de344ca797b737542ebJoe Onorato{ 42d2110dbce071a236b6176de344ca797b737542ebJoe Onorato int err; 43d2110dbce071a236b6176de344ca797b737542ebJoe Onorato int fd; 44d2110dbce071a236b6176de344ca797b737542ebJoe Onorato 45d2110dbce071a236b6176de344ca797b737542ebJoe Onorato fd = open(filename, O_RDONLY); 46d2110dbce071a236b6176de344ca797b737542ebJoe Onorato if (fd == -1) { 47d2110dbce071a236b6176de344ca797b737542ebJoe Onorato fprintf(stderr, "Error opening: %s\n", filename); 48d2110dbce071a236b6176de344ca797b737542ebJoe Onorato return 1; 49d2110dbce071a236b6176de344ca797b737542ebJoe Onorato } 50d2110dbce071a236b6176de344ca797b737542ebJoe Onorato 51d2110dbce071a236b6176de344ca797b737542ebJoe Onorato BackupDataReader reader(fd); 52d2110dbce071a236b6176de344ca797b737542ebJoe Onorato int type; 53d2110dbce071a236b6176de344ca797b737542ebJoe Onorato 54d2110dbce071a236b6176de344ca797b737542ebJoe Onorato while (reader.ReadNextHeader(&type) == 0) { 55d2110dbce071a236b6176de344ca797b737542ebJoe Onorato switch (type) { 56d2110dbce071a236b6176de344ca797b737542ebJoe Onorato case BACKUP_HEADER_APP_V1: 57d2110dbce071a236b6176de344ca797b737542ebJoe Onorato { 58d2110dbce071a236b6176de344ca797b737542ebJoe Onorato String8 packageName; 59d2110dbce071a236b6176de344ca797b737542ebJoe Onorato int cookie; 60d2110dbce071a236b6176de344ca797b737542ebJoe Onorato err = reader.ReadAppHeader(&packageName, &cookie); 61d2110dbce071a236b6176de344ca797b737542ebJoe Onorato if (err == 0) { 62d2110dbce071a236b6176de344ca797b737542ebJoe Onorato printf("App header: %s 0x%08x (%d)\n", packageName.string(), cookie, cookie); 63d2110dbce071a236b6176de344ca797b737542ebJoe Onorato } else { 64d2110dbce071a236b6176de344ca797b737542ebJoe Onorato printf("Error reading app header\n"); 65d2110dbce071a236b6176de344ca797b737542ebJoe Onorato } 66d2110dbce071a236b6176de344ca797b737542ebJoe Onorato break; 67d2110dbce071a236b6176de344ca797b737542ebJoe Onorato } 68d2110dbce071a236b6176de344ca797b737542ebJoe Onorato case BACKUP_HEADER_ENTITY_V1: 69d2110dbce071a236b6176de344ca797b737542ebJoe Onorato { 70d2110dbce071a236b6176de344ca797b737542ebJoe Onorato String8 key; 71d2110dbce071a236b6176de344ca797b737542ebJoe Onorato size_t dataSize; 72d2110dbce071a236b6176de344ca797b737542ebJoe Onorato err = reader.ReadEntityHeader(&key, &dataSize); 73d2110dbce071a236b6176de344ca797b737542ebJoe Onorato if (err == 0) { 74d2110dbce071a236b6176de344ca797b737542ebJoe Onorato printf(" entity: %s (%d bytes)\n", key.string(), dataSize); 75d2110dbce071a236b6176de344ca797b737542ebJoe Onorato } else { 76d2110dbce071a236b6176de344ca797b737542ebJoe Onorato printf(" Error reading entity header\n"); 77d2110dbce071a236b6176de344ca797b737542ebJoe Onorato } 78d2110dbce071a236b6176de344ca797b737542ebJoe Onorato break; 79d2110dbce071a236b6176de344ca797b737542ebJoe Onorato } 80d2110dbce071a236b6176de344ca797b737542ebJoe Onorato case BACKUP_FOOTER_APP_V1: 81d2110dbce071a236b6176de344ca797b737542ebJoe Onorato { 82d2110dbce071a236b6176de344ca797b737542ebJoe Onorato int cookie; 83d2110dbce071a236b6176de344ca797b737542ebJoe Onorato err = reader.ReadAppFooter(&cookie); 84d2110dbce071a236b6176de344ca797b737542ebJoe Onorato if (err == 0) { 85d2110dbce071a236b6176de344ca797b737542ebJoe Onorato printf(" App footer: 0x%08x (%d)\n", cookie, cookie); 86d2110dbce071a236b6176de344ca797b737542ebJoe Onorato } else { 87d2110dbce071a236b6176de344ca797b737542ebJoe Onorato printf(" Error reading entity header\n"); 88d2110dbce071a236b6176de344ca797b737542ebJoe Onorato } 89d2110dbce071a236b6176de344ca797b737542ebJoe Onorato break; 90d2110dbce071a236b6176de344ca797b737542ebJoe Onorato } 91d2110dbce071a236b6176de344ca797b737542ebJoe Onorato default: 92d2110dbce071a236b6176de344ca797b737542ebJoe Onorato { 93d2110dbce071a236b6176de344ca797b737542ebJoe Onorato printf("Unknown chunk type: 0x%08x\n", type); 94d2110dbce071a236b6176de344ca797b737542ebJoe Onorato break; 95d2110dbce071a236b6176de344ca797b737542ebJoe Onorato } 96d2110dbce071a236b6176de344ca797b737542ebJoe Onorato } 97d2110dbce071a236b6176de344ca797b737542ebJoe Onorato } 98d2110dbce071a236b6176de344ca797b737542ebJoe Onorato 99d2110dbce071a236b6176de344ca797b737542ebJoe Onorato return 0; 100d2110dbce071a236b6176de344ca797b737542ebJoe Onorato} 101d2110dbce071a236b6176de344ca797b737542ebJoe Onorato 102d2110dbce071a236b6176de344ca797b737542ebJoe Onoratoint perform_print(const char* entityname, const char* filename) 103d2110dbce071a236b6176de344ca797b737542ebJoe Onorato{ 104d2110dbce071a236b6176de344ca797b737542ebJoe Onorato printf("perform_print(%s, %s);", entityname, filename); 105d2110dbce071a236b6176de344ca797b737542ebJoe Onorato return 0; 106d2110dbce071a236b6176de344ca797b737542ebJoe Onorato} 107d2110dbce071a236b6176de344ca797b737542ebJoe Onorato 108d2110dbce071a236b6176de344ca797b737542ebJoe Onoratoint 109d2110dbce071a236b6176de344ca797b737542ebJoe Onoratomain(int argc, const char** argv) 110d2110dbce071a236b6176de344ca797b737542ebJoe Onorato{ 111d2110dbce071a236b6176de344ca797b737542ebJoe Onorato if (argc <= 1) { 112d2110dbce071a236b6176de344ca797b737542ebJoe Onorato return perform_full_backup(); 113d2110dbce071a236b6176de344ca797b737542ebJoe Onorato } 114d2110dbce071a236b6176de344ca797b737542ebJoe Onorato if (argc == 3 && 0 == strcmp(argv[1], "list")) { 115d2110dbce071a236b6176de344ca797b737542ebJoe Onorato return perform_list(argv[2]); 116d2110dbce071a236b6176de344ca797b737542ebJoe Onorato } 117d2110dbce071a236b6176de344ca797b737542ebJoe Onorato if (argc == 4 && 0 == strcmp(argv[1], "print")) { 118d2110dbce071a236b6176de344ca797b737542ebJoe Onorato return perform_print(argv[2], argv[3]); 119d2110dbce071a236b6176de344ca797b737542ebJoe Onorato } 120d2110dbce071a236b6176de344ca797b737542ebJoe Onorato return usage(argc, argv); 121d2110dbce071a236b6176de344ca797b737542ebJoe Onorato} 122d2110dbce071a236b6176de344ca797b737542ebJoe Onorato 123