/* Image backup functions */ 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); char* name = basename(mount_point); struct stat file_info; mkyaffs2image_callback callback = NULL; if (0 != stat("/sdcard/ebrecovery/.hidenandroidprogress", &file_info)) { callback = yaffs_callback; } ui_print("Backing up %s...\n", name); if (0 != (ret = ensure_root_path_mounted(root) != 0)) { ui_print("Can't mount %s!\n", mount_point); return ret; } compute_directory_stats(mount_point); char tmp[PATH_MAX]; sprintf(tmp, "%s/%s.img", backup_path, name); ret = mkyaffs2image(mount_point, tmp, 0, callback); 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; } return 0; }
int nandroid_backup_partition_extended(const char* backup_path, const char* mount_point, int umount_when_finished) { int ret = 0; char* name = basename(mount_point); struct stat file_info; mkyaffs2image_callback callback = NULL; if (0 != stat("/sdcard/clockworkmod/.hidenandroidprogress", &file_info)) { callback = yaffs_callback; } ui_print("备份 %s...\n", name); if (0 != (ret = ensure_path_mounted(mount_point) != 0)) { ui_print("不能挂载 %s!\n", mount_point); return ret; } compute_directory_stats(mount_point); char tmp[PATH_MAX]; sprintf(tmp, "%s/%s.img", backup_path, name); ret = mkyaffs2image(mount_point, tmp, 0, callback); if (umount_when_finished) { ensure_path_unmounted(mount_point); } if (0 != ret) { ui_print("制作此备份文件时候出错 %s!\n", mount_point); return ret; } return 0; }
static int mkyaffs2image_wrapper(const char* backup_path, const char* backup_file_image, int callback) { return mkyaffs2image(backup_path, backup_file_image, 0, callback ? yaffs_callback : NULL); }
int main(int argc, char *argv[]) { int fixstats = 0; struct stat stats; int opt; char *image; char *dir; while ((opt = getopt(argc, argv, "fc:s:")) != -1) { switch (opt) { case 'f': fixstats = 1; break; case 'c': chunkSize = (unsigned)strtoul(optarg, NULL, 0); break; case 's': spareSize = (unsigned)strtoul(optarg, NULL, 0); break; default: usage(); exit(1); } } if (!chunkSize || !spareSize) { usage(); exit(1); } if ((argc - optind < 2) || (argc - optind > 3)) { usage(); exit(1); } dir = argv[optind]; image = argv[optind + 1]; if (optind + 2 < argc) { if (!strncmp(argv[optind + 2], "convert", strlen("convert"))) convert_endian = 1; else { usage(); exit(1); } } if(stat(dir,&stats) < 0) { fprintf(stderr,"Could not stat %s\n",dir); exit(1); } if(!S_ISDIR(stats.st_mode)) { fprintf(stderr," %s is not a directory\n",dir); exit(1); } error = mkyaffs2image(dir, image, fixstats, NULL, 0); if(error != 0) { perror("operation incomplete"); exit(1); } else { /* printf("Operation complete.\n" "%d objects in %d directories\n" "%d NAND pages\n",nObjects, nDirectories, nPages); */ } close(outFile); exit(0); }
static int mkyaffs2image_wrapper(const char* backup_path, const char* backup_file_image, int callback) { char backup_file_image_with_extension[PATH_MAX]; sprintf(backup_file_image_with_extension, "%s.img", backup_file_image); return mkyaffs2image(backup_path, backup_file_image_with_extension, 0, callback ? yaffs_callback : NULL); }