summaryrefslogtreecommitdiffstats
path: root/libfdisk/src/partition.c
diff options
context:
space:
mode:
authorKarel Zak2013-11-26 15:28:03 +0100
committerKarel Zak2014-03-11 11:35:12 +0100
commit82ebc7dea76ab631125c558bf7442ca9b055eeb1 (patch)
tree0ecc0ae6a556de39e5b3941c0b183885e34c09e7 /libfdisk/src/partition.c
parentlibfdisk: add struct fdisk_partition (diff)
downloadkernel-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.c34
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;