summaryrefslogtreecommitdiffstats
path: root/libfdisk/src
diff options
context:
space:
mode:
Diffstat (limited to 'libfdisk/src')
-rw-r--r--libfdisk/src/label.c43
-rw-r--r--libfdisk/src/libfdisk.h3
-rw-r--r--libfdisk/src/partition.c1
3 files changed, 15 insertions, 32 deletions
diff --git a/libfdisk/src/label.c b/libfdisk/src/label.c
index 0ed7e4ec9..bf2542a16 100644
--- a/libfdisk/src/label.c
+++ b/libfdisk/src/label.c
@@ -199,7 +199,7 @@ int fdisk_verify_disklabel(struct fdisk_context *cxt)
* Returns: 0 on success, otherwise, a corresponding error.
*/
int fdisk_get_partition(struct fdisk_context *cxt, size_t partno,
- struct fdisk_partition *pa)
+ struct fdisk_partition **pa)
{
int rc;
@@ -208,12 +208,17 @@ int fdisk_get_partition(struct fdisk_context *cxt, size_t partno,
if (!cxt->label->op->get_part)
return -ENOSYS;
- fdisk_reset_partition(pa);
- pa->cxt = cxt;
- pa->partno = partno;
-
- rc = cxt->label->op->get_part(cxt, partno, pa);
- if (rc == 0 && fdisk_partition_is_used(pa))
+ if (!*pa) {
+ *pa = fdisk_new_partition();
+ if (!*pa)
+ return -ENOMEM;
+ } else
+ fdisk_reset_partition(*pa);
+ (*pa)->cxt = cxt;
+ (*pa)->partno = partno;
+
+ rc = cxt->label->op->get_part(cxt, partno, *pa);
+ if (rc == 0 && fdisk_partition_is_used(*pa))
DBG(LABEL, dbgprint("get partition %zu", partno));
return rc;
}
@@ -294,11 +299,6 @@ int fdisk_list_partitions(struct fdisk_context *cxt, int *cols, size_t ncols)
rc = -ENOMEM;
goto done;
}
- pa = fdisk_new_partition();
- if (!pa) {
- rc = -ENOMEM;
- goto done;
- }
/* define table columns */
for (j = 0; j < ncols; j++) {
@@ -312,7 +312,7 @@ int fdisk_list_partitions(struct fdisk_context *cxt, int *cols, size_t ncols)
for (i = 0; i < cxt->label->nparts_max; i++) {
struct tt_line *ln;
- rc = fdisk_get_partition(cxt, i, pa);
+ rc = fdisk_get_partition(cxt, i, &pa);
if (rc)
continue;
if (!fdisk_partition_is_used(pa))
@@ -499,23 +499,6 @@ int fdisk_set_disklabel_id(struct fdisk_context *cxt)
}
/**
- * fdisk_get_partition_type:
- * @cxt: fdisk context
- * @partnum: partition number
- *
- * Returns partition type or NULL upon failure.
- */
-struct fdisk_parttype *fdisk_get_partition_type(struct fdisk_context *cxt,
- size_t partnum)
-{
- if (!cxt || !cxt->label || !cxt->label->op->part_get_type)
- return NULL;
-
- DBG(LABEL, dbgprint("partition: %zd: get type", partnum));
- return cxt->label->op->part_get_type(cxt, partnum);
-}
-
-/**
* fdisk_set_partition_type:
* @cxt: fdisk context
* @partnum: partition number
diff --git a/libfdisk/src/libfdisk.h b/libfdisk/src/libfdisk.h
index 7f84c3ebf..d3b646007 100644
--- a/libfdisk/src/libfdisk.h
+++ b/libfdisk/src/libfdisk.h
@@ -153,12 +153,11 @@ extern int fdisk_locate_disklabel(struct fdisk_context *cxt, int n, const char *
extern int fdisk_get_disklabel_id(struct fdisk_context *cxt, char **id);
extern int fdisk_set_disklabel_id(struct fdisk_context *cxt);
-extern int fdisk_get_partition(struct fdisk_context *cxt, size_t partno, struct fdisk_partition *pa);
+extern int fdisk_get_partition(struct fdisk_context *cxt, size_t partno, struct fdisk_partition **pa);
extern int fdisk_add_partition(struct fdisk_context *cxt, struct fdisk_parttype *t);
extern int fdisk_delete_partition(struct fdisk_context *cxt, size_t partnum);
-extern struct fdisk_parttype *fdisk_get_partition_type(struct fdisk_context *cxt, size_t partnum);
extern int fdisk_set_partition_type(struct fdisk_context *cxt, size_t partnum,
struct fdisk_parttype *t);
diff --git a/libfdisk/src/partition.c b/libfdisk/src/partition.c
index b7a63a5e6..add505fba 100644
--- a/libfdisk/src/partition.c
+++ b/libfdisk/src/partition.c
@@ -92,6 +92,7 @@ int fdisk_partition_set_type(struct fdisk_partition *pa, struct fdisk_parttype *
{
if (!pa)
return -EINVAL;
+ fdisk_free_parttype(pa->type);
pa->type = type;
return 0;
}