diff options
author | Karel Zak | 2013-09-03 17:35:15 +0200 |
---|---|---|
committer | Karel Zak | 2013-09-16 16:47:09 +0200 |
commit | c0d20aae6fb4fe5dfdb314ff11858ba2afadab67 (patch) | |
tree | 409cb3cf16765ce13831b96441a6025501c93984 | |
parent | libfdisk: (gpt) use generic 'created partition' message (diff) | |
download | kernel-qcow2-util-linux-c0d20aae6fb4fe5dfdb314ff11858ba2afadab67.tar.gz kernel-qcow2-util-linux-c0d20aae6fb4fe5dfdb314ff11858ba2afadab67.tar.xz kernel-qcow2-util-linux-c0d20aae6fb4fe5dfdb314ff11858ba2afadab67.zip |
libfdisk: add fdisk_locate_disklabel()
The function returns offset and size of disklabel elements.
Signed-off-by: Karel Zak <kzak@redhat.com>
-rw-r--r-- | libfdisk/src/fdiskP.h | 3 | ||||
-rw-r--r-- | libfdisk/src/label.c | 14 | ||||
-rw-r--r-- | libfdisk/src/libfdisk.h | 1 |
3 files changed, 18 insertions, 0 deletions
diff --git a/libfdisk/src/fdiskP.h b/libfdisk/src/fdiskP.h index 8c9fc71e0..45a93c8c3 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 147918e03..95a0abfb9 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 0175a8d0f..7ad356067 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); |