static int pb_complete(int argc, char **argv) { int i, ret, fd; while ((i = getopt(argc, argv, "d:m:")) != EOF) { switch (i) { case 'd': device = optarg; break; case 'm': mount_point = optarg; break; default: usage_complete(); return SYSEXIT_PARAM; } } argc -= optind; argv += optind; GET_DD(argc, argv); if (argc != 0 || fill_opts()) { usage_complete(); return SYSEXIT_PARAM; } ret = get_balloon(mount_point, NULL, &fd); if (ret) return ret; return ploop_balloon_complete(device); }
static int pb_change(int argc, char **argv) { int fd; int i, ret; off_t new_size = 0; int new_size_set = 0; while ((i = getopt(argc, argv, "s:d:m:")) != EOF) { switch (i) { case 's': /* NB: currently, new_size is in 'sector' units */ if (parse_size(optarg, &new_size, "-s")) { usage_change(); return SYSEXIT_PARAM; } new_size_set++; break; case 'd': device = optarg; break; case 'm': mount_point = optarg; break; default: usage_change(); return SYSEXIT_PARAM; } } argc -= optind; argv += optind; GET_DD(argc, argv); if (argc != 0 || !new_size_set || fill_opts()) { usage_change(); return SYSEXIT_PARAM; } ret = get_balloon(mount_point, NULL, &fd); if (ret) return ret; return ploop_balloon_change_size(device, fd, new_size); }
static int pb_check_and_repair(int argc, char **argv, int repair) { int i; while ((i = getopt(argc, argv, "fd:m:")) != EOF) { switch (i) { case 'f': force = 1; break; case 'd': device = optarg; break; case 'm': mount_point = optarg; break; default: if (repair) usage_repair(); else usage_check(); return SYSEXIT_PARAM; } } argc -= optind; argv += optind; GET_DD(argc, argv); if (argc != 0 || fill_opts()) { if (repair) usage_repair(); else usage_check(); return SYSEXIT_PARAM; } return ploop_balloon_check_and_repair(device, mount_point, repair); }
static int pb_status(int argc, char **argv) { int i, ret; __u32 state; while ((i = getopt(argc, argv, "fd:m:")) != EOF) { switch (i) { case 'f': force = 1; break; case 'd': device = optarg; break; case 'm': mount_point = optarg; break; default: usage_status(); return SYSEXIT_PARAM; } } argc -= optind; argv += optind; GET_DD(argc, argv); if (argc != 0 || fill_opts()) { usage_status(); return SYSEXIT_PARAM; } ret = ploop_balloon_get_state(device, &state); if (ret) return ret; fprintf(stdout, "Current state of in-kernel maintenance: %s\n", mntn2str(state)); return 0; }
int check_opts(char **av, t_gen *gen) { int verif; char *param; get_next_params(av, 1); for (verif = 0; (param = get_next_params(av, 0)); ) { if (param[0] == '-') fill_opts(param + 1, gen->opts); else { ++verif; if (test_before_add(param)) gen->path[(gen->nb_path)++] = my_strdup(param); } } order_args(gen); if (!gen->nb_path && verif) return (0); return (1); }
static int pb_clear(int argc, char **argv) { int i, ret; int fd2; while ((i = getopt(argc, argv, "d:m:")) != EOF) { switch (i) { case 'd': device = optarg; break; case 'm': mount_point = optarg; break; default: usage_clear(); return SYSEXIT_PARAM; } } argc -= optind; argv += optind; GET_DD(argc, argv); if (argc != 0 || fill_opts()) { usage_clear(); return SYSEXIT_PARAM; } ret = get_balloon(mount_point, NULL, &fd2); if (ret) return ret; ret = ploop_balloon_clear_state(device); if (ret) return ret; fprintf(stdout, "Current state of in-kernel maintenance is OFF now\n"); return 0; }
static int pb_show(int argc, char **argv) { int i, ret; struct stat st; while ((i = getopt(argc, argv, "fd:m:")) != EOF) { switch (i) { case 'f': force = 1; break; case 'd': device = optarg; break; case 'm': mount_point = optarg; break; default: usage_show(); return SYSEXIT_PARAM; } } argc -= optind; argv += optind; GET_DD(argc, argv); if (argc != 0 || fill_opts()) { usage_show(); return SYSEXIT_PARAM; } ret = get_balloon(mount_point, &st, NULL); if (ret) return ret; fprintf(stdout, "Current size of hidden balloon is %llu bytes\n", (unsigned long long) st.st_size); return 0; }