diff options
author | Karel Zak | 2014-04-18 13:26:08 +0200 |
---|---|---|
committer | Karel Zak | 2014-04-18 13:26:08 +0200 |
commit | dd7ba604631ce57f194f56dfb71414e42d914a21 (patch) | |
tree | 180cd564eb416092521b48da0c06c24e2a6e8de4 /libfdisk | |
parent | nsenter: add + to getopt_long() (diff) | |
download | kernel-qcow2-util-linux-dd7ba604631ce57f194f56dfb71414e42d914a21.tar.gz kernel-qcow2-util-linux-dd7ba604631ce57f194f56dfb71414e42d914a21.tar.xz kernel-qcow2-util-linux-dd7ba604631ce57f194f56dfb71414e42d914a21.zip |
libfdisk: add partitions reorder operation to label API
Signed-off-by: Karel Zak <kzak@redhat.com>
Diffstat (limited to 'libfdisk')
-rw-r--r-- | libfdisk/src/dos.c | 3 | ||||
-rw-r--r-- | libfdisk/src/fdiskP.h | 4 | ||||
-rw-r--r-- | libfdisk/src/label.c | 18 | ||||
-rw-r--r-- | libfdisk/src/libfdisk.h | 3 |
4 files changed, 25 insertions, 3 deletions
diff --git a/libfdisk/src/dos.c b/libfdisk/src/dos.c index b68765bb1..645410cbd 100644 --- a/libfdisk/src/dos.c +++ b/libfdisk/src/dos.c @@ -1803,7 +1803,7 @@ again: DBG(LABEL, print_chain_of_logicals(cxt)); } -int fdisk_dos_fix_order(struct fdisk_context *cxt) +static int dos_reorder(struct fdisk_context *cxt) { struct pte *pei, *pek; size_t i,k; @@ -1990,6 +1990,7 @@ static const struct fdisk_label_operations dos_operations = .create = dos_create_disklabel, .locate = dos_locate_disklabel, .list = dos_list_disklabel, + .reorder = dos_reorder, .get_id = dos_get_disklabel_id, .set_id = dos_set_disklabel_id, diff --git a/libfdisk/src/fdiskP.h b/libfdisk/src/fdiskP.h index f966d0a68..f5b4bb8ed 100644 --- a/libfdisk/src/fdiskP.h +++ b/libfdisk/src/fdiskP.h @@ -182,10 +182,12 @@ struct fdisk_label_operations { int (*verify)(struct fdisk_context *cxt); /* create new disk label */ int (*create)(struct fdisk_context *cxt); - /* list partition table */ + /* list disklabel details */ int (*list)(struct fdisk_context *cxt); /* returns offset and size of the 'n' part of the PT */ int (*locate)(struct fdisk_context *cxt, int n, const char **name, off_t *offset, size_t *size); + /* reorder partitions */ + int (*reorder)(struct fdisk_context *cxt); /* get disk label ID */ int (*get_id)(struct fdisk_context *cxt, char **id); diff --git a/libfdisk/src/label.c b/libfdisk/src/label.c index 9c6fcc5b3..3881a2713 100644 --- a/libfdisk/src/label.c +++ b/libfdisk/src/label.c @@ -372,6 +372,24 @@ int fdisk_partition_toggle_flag(struct fdisk_context *cxt, return rc; } +/** + * fdisk_reorder_partitions + * @cxt: fdisk context + * + * Sort partitions according to the partition start sector. + * + * Returns 0 on success, otherwise, a corresponding error. + */ +int fdisk_reorder_partitions(struct fdisk_context *cxt) +{ + if (!cxt || !cxt->label) + return -EINVAL; + if (!cxt->label->op->reorder) + return -ENOSYS; + + return cxt->label->op->reorder(cxt); +} + /* * Resets the current used label driver to initial state */ diff --git a/libfdisk/src/libfdisk.h b/libfdisk/src/libfdisk.h index b44451da6..4143d9bc3 100644 --- a/libfdisk/src/libfdisk.h +++ b/libfdisk/src/libfdisk.h @@ -224,6 +224,8 @@ extern int fdisk_partition_end_follow_default(struct fdisk_partition *pa, int en extern int fdisk_dump_partition(struct fdisk_partition *pa, FILE *f); +extern int fdisk_reorder_partitions(struct fdisk_context *cxt); + /* table.c */ extern struct fdisk_table *fdisk_new_table(void); extern int fdisk_reset_table(struct fdisk_table *tb); @@ -324,7 +326,6 @@ extern struct dos_partition *fdisk_dos_get_partition( struct fdisk_context *cxt, size_t i); -extern int fdisk_dos_fix_order(struct fdisk_context *cxt); extern int fdisk_dos_move_begin(struct fdisk_context *cxt, size_t i); #define DOS_FLAG_ACTIVE 1 |