int main(int argc, char *argv[]) { struct partition *parts[MAX_PARTS]; int part_count, i; bool ignore_fs_type = false; bool colons = false; PedPartitionFlag require_flag = 0; int opt; struct option longopts[] = { { "ignore-fstype", no_argument, NULL, 'i' }, { "colons", no_argument, NULL, 'c' }, { "flag", required_argument, NULL, 'f' }, { NULL, 0, NULL, 0 } }; while ((opt = getopt_long(argc, argv, "icf:", longopts, NULL)) != EOF) { switch (opt) { case 'i': ignore_fs_type = true; break; case 'c': colons = true; break; case 'f': require_flag = ped_partition_flag_get_by_name(optarg); if (!require_flag) { fprintf(stderr, "Unknown parted flag '%s'\n", optarg); exit(1); } break; } } if ((part_count = get_all_partitions(parts, MAX_PARTS, ignore_fs_type, require_flag)) <= 0) return 1; for (i = 0; i < part_count; i++) { if (colons) printf("%s:%s:%lld\n", parts[i]->path, parts[i]->fstype != NULL ? parts[i]->fstype : "", parts[i]->size); else printf("%s\t%s\t%s\n", parts[i]->path, parts[i]->fstype != NULL ? parts[i]->fstype : "", parts[i]->size > 0 ? size_desc(parts[i]->size) : ""); } return 0; }
int main(void) { int i, state = 0, ret; int (*states[])() = { partition_menu, filesystem, mountpoint, mountpoint_manual, fixup, // never does an INPUT, just handles the manual mountpoint result NULL }; /* FIXME: How can we tell which file system modules to load? */ char *file_system_modules[] = {"ext2", "ext3", "reiserfs", "jfs", "xfs", NULL}; debconf = debconfclient_new(); debconf_capb(debconf, "backup"); ped_exception_set_handler(my_exception_handler); for (i = 0; file_system_modules[i]; i++) modprobe(file_system_modules[i]); if (check_proc_mounts("")) { // Chicken out if /target is already mounted debconf_set(debconf,"partconf/already-mounted", "no"); debconf_input(debconf, "critical", "partconf/already-mounted"); debconf_go(debconf); debconf_get(debconf,"partconf/already-mounted"); if (strcmp(debconf->value, "false") == 0) return 0; } if (!umount_target()) { debconf_input(debconf, "critical", "partconf/umount-failed"); debconf_go(debconf); return 1; } if ((part_count = get_all_partitions(parts, MAX_PARTS, false, 0)) <= 0) { debconf_input(debconf, "critical", "partconf/no-partitions"); debconf_go(debconf); return 1; } if (get_all_filesystems() <= 0) { debconf_input(debconf, "critical", "partconf/no-filesystems"); debconf_go(debconf); return 1; } fschoices = build_fs_choices(); while (state >= 0) { ret = states[state](); if (ret < 0) return 10; else if (ret == 0 && debconf_go(debconf) == 0) state++; else state--; if (states[state] == NULL) state = 0; } return ret; }