int nandroid_main(int argc, char** argv) { load_volume_table(); char backup_path[PATH_MAX]; if (argc > 3 || argc < 2) return nandroid_usage(); if (strcmp("backup", argv[1]) == 0) { if (argc != 2) return nandroid_usage(); nandroid_generate_timestamp_path(backup_path); return nandroid_backup(backup_path); } if (strcmp("restore", argv[1]) == 0) { if (argc != 3) return nandroid_usage(); return nandroid_restore(argv[2], 1, 1, 1, 1, 1, 0); } if (strcmp("dump", argv[1]) == 0) { if (argc != 3) return nandroid_usage(); return nandroid_dump(argv[2]); } if (strcmp("undump", argv[1]) == 0) { if (argc != 3) return nandroid_usage(); return nandroid_undump(argv[2]); } return nandroid_usage(); }
static int cmd_backup_rom(const char *name, void *cookie, int argc, const char *argv[], PermissionRequestList *permissions) { UNUSED(cookie); CHECK_WORDS(); char* backup_name = NULL; char backup_path[PATH_MAX]; switch(argc) { case 0: { char backup_path[PATH_MAX]; nandroid_generate_timestamp_path(backup_path); backup_name = backup_path; } break; case 1: backup_name = argv[0]; break; default: LOGE("Command %s requires zero or one argument\n", name); return 1; } return nandroid_backup(backup_name); }
int do_lagfix(int do_fr) { ui_print("old config was:\n"); ui_print_file("/system/etc/lagfix.conf.old"); ui_print("new config is:\n"); ui_print_file("/system/etc/lagfix.conf"); ui_print("checking mounts available\n"); if (ensure_root_path_mounted("DATA:")!=0) return -1; if (ensure_root_path_mounted("DATADATA:")!=0) return -1; if (ensure_root_path_mounted("CACHE:")!=0) return -1; if (ensure_root_path_mounted("SDCARD:")!=0) return -1; char tmp[PATH_MAX]; nandroid_generate_timestamp_path(tmp); if (do_fr!=2) { ui_print("Creating a nandroid backup at %s\n",tmp); if (nandroid_backup_flags(tmp,DONT_BACKUP_SYSTEM)!=0) return -1; } else { ui_print("Not creating a backup\n"); } ui_print("Backup completed, recreating file systems\n"); ui_print("Unmounting\n"); unmount_all_lagfixed(); ui_print("Switching to new config\n"); __system("cp /system/etc/lagfix.conf /system/etc/lagfix.conf.old"); ui_print("Creating /data\n"); create_lagfix_partition(0); ui_print("Creating /dbdata\n"); create_lagfix_partition(1); ui_print("Creating /cache\n"); create_lagfix_partition(2); ui_print("Mounting to test\n"); dont_use_bind_options = 1; if (ensure_root_path_mounted("DATA:")!=0) return -1; if (ensure_root_path_mounted("DATADATA:")!=0) return -1; if (ensure_root_path_mounted("CACHE:")!=0) return -1; dont_use_bind_options = 0; __system("mount"); // for debug purposes if (get_bind_options()) { ui_print("Creating bind directories\n"); __system("mkdir -p /dbdata/.data/data"); __system("mkdir -p /data/data"); } ui_print("Unmounting again\n"); unmount_all_lagfixed(); if (do_fr) { ui_print("Factory reset was requested, not restoring backed up data\n"); } else { ui_print("Restoring data\n"); nandroid_restore(tmp,0,0,1,1,0); // restore might have brought some .data into dbdata, clear them if (!get_bind_options()) { if (ensure_root_path_mounted("DATADATA:")!=0) return -1; __system("rm -rf /dbdata/.data"); } } __system("mount"); ui_print("Unmounting again to be sure\n"); sync(); sleep(5); unmount_all_lagfixed(); sync(); return 0; }