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; }
char * build_part_choices(struct partition *parts[], const int part_count) { char *list[part_count]; char *tmp, *tmp2; int i, max_len, len; //printf("part_count=%d\n", part_count); if (part_count <= 0) return NULL; max_len = 0; for (i = 0; i < part_count; i++) { len = strlen(parts[i]->description) - strcount(parts[i]->description, ','); if (len > max_len) max_len = len; } // pad with spaces for (i = 0; i < part_count; i++) { asprintf(&list[i], "%-*s", max_len, parts[i]->description); } max_len = strlen("n/a"); for (i = 0; i < part_count; i++) { if (parts[i]->size > 0 && strlen(size_desc(parts[i]->size)) > max_len) max_len = strlen(size_desc(parts[i]->size)); } // add and pad for (i = 0; i < part_count; i++) { asprintf(&tmp, "%s %-*s", list[i], max_len, (parts[i]->size > 0) ? size_desc(parts[i]->size) : "n/a"); free(list[i]); list[i] = tmp; } max_len = strlen("n/a"); for (i = 0; i < part_count; i++) { if (parts[i]->op.filesystem != NULL) { if (strlen(parts[i]->op.filesystem) > max_len) max_len = strlen(parts[i]->op.filesystem); } else if (parts[i]->fstype != NULL && strlen(parts[i]->fstype) > max_len) max_len = strlen(parts[i]->fstype); } for (i = 0; i < part_count; i++) { asprintf(&tmp, "%s %-*s", list[i], max_len, (parts[i]->op.filesystem != NULL) ? parts[i]->op.filesystem : (parts[i]->fstype != NULL) ? parts[i]->fstype : "n/a"); free(list[i]); list[i] = tmp; } max_len = 0; for (i = 0; i < part_count; i++) { if (parts[i]->op.mountpoint != NULL && strlen(parts[i]->op.mountpoint) > max_len) max_len = strlen(parts[i]->op.mountpoint); } if (max_len > 0) for (i = 0; i < part_count; i++) { asprintf(&tmp, "%s %-*s", list[i], max_len, (parts[i]->op.mountpoint != NULL) ? parts[i]->op.mountpoint : ""); free(list[i]); list[i] = tmp; } /* PHEW */ tmp = list[0]; //printf("<%s>\n", list[0]); for (i = 1; i < part_count; i++) { //printf("<%s>\n", list[i]); asprintf(&tmp2, "%s, %s", tmp, list[i]); free(list[i]); free(tmp); tmp = tmp2; } return tmp; }