diff options
author | Karel Zak | 2013-11-26 15:28:03 +0100 |
---|---|---|
committer | Karel Zak | 2014-03-11 11:35:12 +0100 |
commit | 82ebc7dea76ab631125c558bf7442ca9b055eeb1 (patch) | |
tree | 0ecc0ae6a556de39e5b3941c0b183885e34c09e7 /libfdisk/src/partition.c | |
parent | libfdisk: add struct fdisk_partition (diff) | |
download | kernel-qcow2-util-linux-82ebc7dea76ab631125c558bf7442ca9b055eeb1.tar.gz kernel-qcow2-util-linux-82ebc7dea76ab631125c558bf7442ca9b055eeb1.tar.xz kernel-qcow2-util-linux-82ebc7dea76ab631125c558bf7442ca9b055eeb1.zip |
libfdisk: improve conversion to string
Signed-off-by: Karel Zak <kzak@redhat.com>
Diffstat (limited to 'libfdisk/src/partition.c')
-rw-r--r-- | libfdisk/src/partition.c | 34 |
1 files changed, 27 insertions, 7 deletions
diff --git a/libfdisk/src/partition.c b/libfdisk/src/partition.c index 91d1bff29..12ac435fa 100644 --- a/libfdisk/src/partition.c +++ b/libfdisk/src/partition.c @@ -203,26 +203,41 @@ int fdisk_partition_to_string(struct fdisk_partition *pa, switch (id) { case FDISK_COL_DEVICE: - p = fdisk_partname(pa->cxt->dev_path, pa->partno + 1); + if (pa->cxt->label->flags & FDISK_LABEL_FL_INCHARS_PARTNO) + rc = asprintf(&p, "%c", (int) pa->partno + 'a'); + else + p = fdisk_partname(pa->cxt->dev_path, pa->partno + 1); break; case FDISK_COL_START: - if (asprintf(&p, "%ju", pa->start) < 0) - rc = -ENOMEM; + rc = pa->start_post ? + asprintf(&p, "%ju%c", pa->start, pa->start_post) : + asprintf(&p, "%ju", pa->start); break; case FDISK_COL_END: - if (asprintf(&p, "%ju", pa->end) < 0) - rc = -ENOMEM; + rc = pa->end_post ? + asprintf(&p, "%ju%c", pa->end, pa->end_post) : + asprintf(&p, "%ju", pa->end); break; case FDISK_COL_SIZE: if (fdisk_context_display_details(pa->cxt)) { - if (asprintf(&p, "%ju", pa->size)) - rc = -ENOMEM; + rc = pa->size_post ? + asprintf(&p, "%ju%c", pa->size, pa->size_post) : + asprintf(&p, "%ju", pa->size); } else { p = size_to_human_string(SIZE_SUFFIX_1LETTER, pa->size); if (!p) rc = -ENOMEM; } break; + case FDISK_COL_BSIZE: + rc = asprintf(&p, "%ju", pa->bsize); + break; + case FDISK_COL_FSIZE: + rc = asprintf(&p, "%ju", pa->fsize); + break; + case FDISK_COL_CPG: + rc = asprintf(&p, "%ju", pa->cpg); + break; case FDISK_COL_TYPE: p = pa->type && pa->type->name ? strdup(pa->type->name) : NULL; break; @@ -239,6 +254,11 @@ int fdisk_partition_to_string(struct fdisk_partition *pa, return -EINVAL; } + if (rc < 0) + rc = -ENOMEM; + else if (rc > 0) + rc = 0; + if (data) *data = p; return rc; |