Backup of Froyo apps on external storage.

This commit is contained in:
Koushik Dutta 2010-07-03 13:54:21 -07:00
parent 6440ed585f
commit 062d6b0bb3
4 changed files with 48 additions and 9 deletions

View File

@ -448,7 +448,6 @@ int format_non_mtd_device(const char* root)
ui_print("Error mounting %s!\n", path);
ui_print("Skipping format...\n");
return 0;
}
static char tmp[PATH_MAX];

View File

@ -75,7 +75,7 @@ void compute_directory_stats(char* directory)
ui_show_progress(1, 0);
}
int nandroid_backup_partition(const char* backup_path, char* root) {
int nandroid_backup_partition_extended(const char* backup_path, char* root, int umount_when_finished) {
int ret = 0;
char mount_point[PATH_MAX];
translate_root_path(root, mount_point, PATH_MAX);
@ -96,7 +96,9 @@ int nandroid_backup_partition(const char* backup_path, char* root) {
char tmp[PATH_MAX];
sprintf(tmp, "%s/%s.img", backup_path, name);
ret = mkyaffs2image(mount_point, tmp, 0, callback);
ensure_root_path_unmounted(root);
if (umount_when_finished) {
ensure_root_path_unmounted(root);
}
if (0 != ret) {
ui_print("Error while making a yaffs2 image of %s!\n", mount_point);
return ret;
@ -104,6 +106,10 @@ int nandroid_backup_partition(const char* backup_path, char* root) {
return 0;
}
int nandroid_backup_partition(const char* backup_path, char* root) {
return nandroid_backup_partition_extended(backup_path, root, 1);
}
int nandroid_backup(const char* backup_path)
{
ui_set_background(BACKGROUND_ICON_INSTALLING);
@ -150,10 +156,20 @@ int nandroid_backup(const char* backup_path)
return ret;
#endif
if (0 != (ret = nandroid_backup_partition(backup_path, "CACHE:")))
struct stat st;
if (0 != stat("/sdcard/.android_secure", &st))
{
ui_print("No /sdcard/.android_secure found. Skipping backup of applications on external storage.\n");
}
else
{
if (0 != (ret = nandroid_backup_partition_extended(backup_path, "SDCARD:/.android_secure", 0)))
return ret;
}
if (0 != (ret = nandroid_backup_partition_extended(backup_path, "CACHE:", 0)))
return ret;
struct stat st;
if (0 != stat(SDEXT_DEVICE, &st))
{
ui_print("No sd-ext found. Skipping backup of sd-ext.\n");
@ -165,7 +181,7 @@ int nandroid_backup(const char* backup_path)
else if (0 != (ret = nandroid_backup_partition(backup_path, "SDEXT:")))
return ret;
}
ui_print("Generating md5 sum...\n");
sprintf(tmp, "nandroid-md5.sh %s", backup_path);
if (0 != (ret = __system(tmp))) {
@ -182,7 +198,7 @@ int nandroid_backup(const char* backup_path)
typedef int (*format_function)(char* root);
int nandroid_restore_partition(const char* backup_path, const char* root) {
int nandroid_restore_partition_extended(const char* backup_path, const char* root, int umount_when_finished) {
int ret = 0;
char mount_point[PATH_MAX];
translate_root_path(root, mount_point, PATH_MAX);
@ -216,12 +232,17 @@ int nandroid_restore_partition(const char* backup_path, const char* root) {
return ret;
}
if (0 != strcmp(root, "CACHE")) {
if (umount_when_finished) {
ensure_root_path_unmounted(root);
}
return 0;
}
int nandroid_restore_partition(const char* backup_path, const char* root) {
return nandroid_restore_partition_extended(backup_path, root, 1);
}
int nandroid_restore(const char* backup_path, int restore_boot, int restore_system, int restore_data, int restore_cache, int restore_sdext)
{
ui_set_background(BACKGROUND_ICON_INSTALLING);
@ -263,7 +284,23 @@ int nandroid_restore(const char* backup_path, int restore_boot, int restore_syst
return ret;
#endif
if (restore_cache && 0 != (ret = nandroid_restore_partition(backup_path, "CACHE:")))
if (restore_data)
{
struct statfs s;
sprintf(tmp, "%s/.android_secure.img", backup_path);
if (0 != (ret = statfs(tmp, &s)))
{
ui_print(".android_secure.img not found. Skipping restore of applications on external storage.");
}
else
{
__system("mkdir -p /sdcard/.android_secure");
if (0 != (ret = nandroid_restore_partition_extended(backup_path, "SDCARD:/.android_secure", 0)))
return ret;
}
}
if (restore_cache && 0 != (ret = nandroid_restore_partition_extended(backup_path, "CACHE:", 0)))
return ret;
if (restore_sdext)

View File

@ -397,6 +397,7 @@ wipe_data(int confirm) {
#endif
erase_root("CACHE:");
erase_root("SDEXT:");
erase_root("SDCARD:/.android_secure");
ui_print("Data wipe complete.\n");
}

View File

@ -314,10 +314,12 @@ format_root_device(const char *root)
while (*c != '\0' && *c != ':') {
c++;
}
/*
if (c[0] != ':' || c[1] != '\0') {
LOGW("format_root_device: bad root name \"%s\"\n", root);
return -1;
}
*/
const RootInfo *info = get_root_info_for_path(root);
if (info == NULL || info->device == NULL) {