From c0d20aae6fb4fe5dfdb314ff11858ba2afadab67 Mon Sep 17 00:00:00 2001 From: Karel Zak Date: Tue, 3 Sep 2013 17:35:15 +0200 Subject: [PATCH] libfdisk: add fdisk_locate_disklabel() The function returns offset and size of disklabel elements. Signed-off-by: Karel Zak --- libfdisk/src/fdiskP.h | 3 +++ libfdisk/src/label.c | 14 ++++++++++++++ libfdisk/src/libfdisk.h | 1 + 3 files changed, 18 insertions(+) diff --git a/libfdisk/src/fdiskP.h b/libfdisk/src/fdiskP.h index 8c9fc71e07..45a93c8c3d 100644 --- a/libfdisk/src/fdiskP.h +++ b/libfdisk/src/fdiskP.h @@ -148,6 +148,9 @@ struct fdisk_label_operations { int (*create)(struct fdisk_context *cxt); /* list partition table */ 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); + /* get disk label ID */ int (*get_id)(struct fdisk_context *cxt, char **id); /* set disk label ID */ diff --git a/libfdisk/src/label.c b/libfdisk/src/label.c index 147918e032..95a0abfb95 100644 --- a/libfdisk/src/label.c +++ b/libfdisk/src/label.c @@ -245,6 +245,20 @@ int fdisk_create_disklabel(struct fdisk_context *cxt, const char *name) return cxt->label->op->create(cxt); } + +int fdisk_locate_disklabel(struct fdisk_context *cxt, int n, const char **name, + off_t *offset, size_t *size) +{ + if (!cxt || !cxt->label) + return -EINVAL; + if (!cxt->label->op->locate) + return -ENOSYS; + + DBG(LABEL, dbgprint("locating %d chunk of %s.", n, cxt->label->name)); + return cxt->label->op->locate(cxt, n, name, offset, size); +} + + /** * fdisk_get_disklabel_id: * @cxt: fdisk context diff --git a/libfdisk/src/libfdisk.h b/libfdisk/src/libfdisk.h index 0175a8d0f4..7ad3560679 100644 --- a/libfdisk/src/libfdisk.h +++ b/libfdisk/src/libfdisk.h @@ -127,6 +127,7 @@ extern int fdisk_write_disklabel(struct fdisk_context *cxt); extern int fdisk_verify_disklabel(struct fdisk_context *cxt); extern int fdisk_create_disklabel(struct fdisk_context *cxt, const char *name); extern int fdisk_list_disklabel(struct fdisk_context *cxt); +extern int fdisk_locate_disklabel(struct fdisk_context *cxt, int n, const char **name, off_t *offset, size_t *size); extern int fdisk_get_disklabel_id(struct fdisk_context *cxt, char **id); extern int fdisk_set_disklabel_id(struct fdisk_context *cxt); -- 2.47.2