From: Karel Zak Date: Tue, 3 Sep 2013 15:35:15 +0000 (+0200) Subject: libfdisk: add fdisk_locate_disklabel() X-Git-Tag: v2.24-rc1~94 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c0d20aae6fb4fe5dfdb314ff11858ba2afadab67;p=thirdparty%2Futil-linux.git libfdisk: add fdisk_locate_disklabel() The function returns offset and size of disklabel elements. Signed-off-by: Karel Zak --- 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);