support backup and restore on internal sdcard
Change-Id: I6295b5bb7ada967ca223758be58d555c1a2ff462
diff --git a/Android.mk b/Android.mk
index e01f71d..843d660 100644
--- a/Android.mk
+++ b/Android.mk
@@ -37,7 +37,7 @@
RECOVERY_NAME := CWM-based Recovery
endif
-RECOVERY_VERSION := $(RECOVERY_NAME) v5.0.2.6
+RECOVERY_VERSION := $(RECOVERY_NAME) v5.0.2.7
LOCAL_CFLAGS += -DRECOVERY_VERSION="$(RECOVERY_VERSION)"
RECOVERY_API_VERSION := 2
diff --git a/extendedcommands.c b/extendedcommands.c
index 2b6d5c3..9e63782 100644
--- a/extendedcommands.c
+++ b/extendedcommands.c
@@ -333,10 +333,10 @@
install_zip(file);
}
-void show_nandroid_restore_menu()
+void show_nandroid_restore_menu(const char* path)
{
- if (ensure_path_mounted("/sdcard") != 0) {
- LOGE ("Can't mount /sdcard\n");
+ if (ensure_path_mounted(path) != 0) {
+ LOGE("Can't mount %s\n", path);
return;
}
@@ -345,7 +345,9 @@
NULL
};
- char* file = choose_file_menu("/sdcard/clockworkmod/backup/", NULL, headers);
+ char tmp[PATH_MAX];
+ sprintf(tmp, "%s/clockworkmod/backup/", path);
+ char* file = choose_file_menu(tmp, NULL, headers);
if (file == NULL)
return;
@@ -713,7 +715,7 @@
}
-void show_nandroid_advanced_restore_menu()
+void show_nandroid_advanced_restore_menu(const char* path)
{
if (ensure_path_mounted("/sdcard") != 0) {
LOGE ("Can't mount /sdcard\n");
@@ -792,12 +794,18 @@
NULL
};
- static char* list[] = { "Backup",
- "Restore",
- "Advanced Restore",
+ static char* list[] = { "backup",
+ "restore",
+ "advanced restore",
+ "backup to internal sdcard",
+ "restore from internal sdcard",
+ "advanced restore from internal sdcard",
NULL
};
+ if (volume_for_path("/emmc") == NULL)
+ INSTALL_MENU_ITEMS[3] = NULL;
+
int chosen_item = get_menu_selection(headers, list, 0, 0);
switch (chosen_item)
{
@@ -820,10 +828,34 @@
}
break;
case 1:
- show_nandroid_restore_menu();
+ show_nandroid_restore_menu("/sdcard");
break;
case 2:
- show_nandroid_advanced_restore_menu();
+ show_nandroid_advanced_restore_menu("/sdcard");
+ break;
+ case 3:
+ {
+ char backup_path[PATH_MAX];
+ time_t t = time(NULL);
+ struct tm *tmp = localtime(&t);
+ if (tmp == NULL)
+ {
+ struct timeval tp;
+ gettimeofday(&tp, NULL);
+ sprintf(backup_path, "/emmc/clockworkmod/backup/%d", tp.tv_sec);
+ }
+ else
+ {
+ strftime(backup_path, sizeof(backup_path), "/emmc/clockworkmod/backup/%F.%H.%M.%S", tmp);
+ }
+ nandroid_backup(backup_path);
+ }
+ break;
+ case 4:
+ show_nandroid_restore_menu("/emmc");
+ break;
+ case 5:
+ show_nandroid_advanced_restore_menu("/emmc");
break;
}
}
@@ -1048,9 +1080,8 @@
write_fstab_root("/boot", file);
write_fstab_root("/cache", file);
write_fstab_root("/data", file);
- if (has_datadata()) {
- write_fstab_root("/datadata", file);
- }
+ write_fstab_root("/datadata", file);
+ write_fstab_root("/emmc", file);
write_fstab_root("/system", file);
write_fstab_root("/sdcard", file);
write_fstab_root("/sd-ext", file);
diff --git a/extendedcommands.h b/extendedcommands.h
index 101552f..53a0201 100644
--- a/extendedcommands.h
+++ b/extendedcommands.h
@@ -17,7 +17,10 @@
do_nandroid_restore();
void
-show_nandroid_restore_menu();
+show_nandroid_restore_menu(const char* path);
+
+void
+show_nandroid_advanced_restore_menu(const char* path);
void
show_nandroid_menu();
diff --git a/nandroid.c b/nandroid.c
index ffc5ac0..315660c 100644
--- a/nandroid.c
+++ b/nandroid.c
@@ -228,13 +228,17 @@
{
ui_set_background(BACKGROUND_ICON_INSTALLING);
- if (ensure_path_mounted("/sdcard") != 0)
- return print_and_error("Can't mount /sdcard\n");
+ if (ensure_path_mounted(backup_path) != 0) {
+ return print_and_error("Can't mount backup path.\n");
+ }
+ Volume* volume = volume_for_path(backup_path);
+ if (NULL == volume)
+ return print_and_error("Unable to find volume for backup path.\n");
int ret;
struct statfs s;
- if (0 != (ret = statfs("/sdcard", &s)))
- return print_and_error("Unable to stat /sdcard\n");
+ if (0 != (ret = statfs(volume->mount_point, &s)))
+ return print_and_error("Unable to stat backup path.\n");
uint64_t bavail = s.f_bavail;
uint64_t bsize = s.f_bsize;
uint64_t sdcard_free = bavail * bsize;
@@ -513,8 +517,8 @@
ui_show_indeterminate_progress();
yaffs_files_total = 0;
- if (ensure_path_mounted("/sdcard") != 0)
- return print_and_error("Can't mount /sdcard\n");
+ if (ensure_path_mounted(backup_path) != 0)
+ return print_and_error("Can't mount backup path\n");
char tmp[PATH_MAX];