SNAPSHOT_LOAD_MEMBER(lviv_state, lviv) { std::vector<uint8_t> snapshot_data(LVIV_SNAPSHOT_SIZE); image.fread(&snapshot_data[0], LVIV_SNAPSHOT_SIZE); if (verify_snapshot(&snapshot_data[0], snapshot_size) != image_verify_result::PASS) { return image_init_result::FAIL; } setup_snapshot(&snapshot_data[0]); dump_registers(); logerror("Snapshot file loaded\n"); return image_init_result::PASS; }
static int handle_setup_snap(int argc, char **argv){ int ret, c; unsigned int minor; unsigned long cache_size = 0, fallocated_space = 0; char *bdev, *cow; //get cache size and fallocated space params, if given while((c = getopt(argc, argv, "c:f:")) != -1){ switch(c){ case 'c': ret = parse_ul(optarg, &cache_size); if(ret) goto handle_setup_snap_error; break; case 'f': ret = parse_ul(optarg, &fallocated_space); if(ret) goto handle_setup_snap_error; break; default: errno = EINVAL; goto handle_setup_snap_error; } } if(argc - optind != 3){ errno = EINVAL; goto handle_setup_snap_error; } bdev = argv[optind]; cow = argv[optind + 1]; ret = parse_ui(argv[optind + 2], &minor); if(ret) goto handle_setup_snap_error; return setup_snapshot(minor, bdev, cow, fallocated_space, cache_size); handle_setup_snap_error: perror("error interpreting setup snapshot parameters"); print_help(-1); return 0; }