diff options
author | Karel Zak | 2013-01-28 16:14:21 +0100 |
---|---|---|
committer | Karel Zak | 2013-03-11 13:00:54 +0100 |
commit | 7845ca8dc28c93939d99a1d0564f97eddcba1079 (patch) | |
tree | db23e3fa2004ad30bd4ddfad0ad252706aa55be6 /libfdisk/src/context.c | |
parent | libfdisk: fix gpt status, don't use xcalloc() in library (diff) | |
download | kernel-qcow2-util-linux-7845ca8dc28c93939d99a1d0564f97eddcba1079.tar.gz kernel-qcow2-util-linux-7845ca8dc28c93939d99a1d0564f97eddcba1079.tar.xz kernel-qcow2-util-linux-7845ca8dc28c93939d99a1d0564f97eddcba1079.zip |
libfdisk: add "ask" interface
Signed-off-by: Karel Zak <kzak@redhat.com>
Diffstat (limited to 'libfdisk/src/context.c')
-rw-r--r-- | libfdisk/src/context.c | 49 |
1 files changed, 36 insertions, 13 deletions
diff --git a/libfdisk/src/context.c b/libfdisk/src/context.c index 908889b4f..4a2faf97d 100644 --- a/libfdisk/src/context.c +++ b/libfdisk/src/context.c @@ -68,8 +68,7 @@ int fdisk_context_switch_label(struct fdisk_context *cxt, const char *name) static void reset_context(struct fdisk_context *cxt) { - size_t nlbs, i; - struct fdisk_label *lbs[ ARRAY_SIZE(cxt->labels) ]; + size_t i; DBG(CONTEXT, dbgprint("\n-----\nresetting context %p", cxt)); @@ -77,25 +76,30 @@ static void reset_context(struct fdisk_context *cxt) for (i = 0; i < cxt->nlabels; i++) fdisk_deinit_label(cxt->labels[i]); - /* remember permanent setting */ - memcpy(lbs, cxt->labels, sizeof(lbs)); - nlbs = cxt->nlabels; - /* free device specific stuff */ if (cxt->dev_fd > -1) close(cxt->dev_fd); free(cxt->dev_path); free(cxt->firstsector); - /* the reset */ - memset(cxt, 0, sizeof(*cxt)); - /* initialize */ cxt->dev_fd = -1; - - /* set permanent setting */ - memcpy(cxt->labels, lbs, sizeof(lbs)); - cxt->nlabels = nlbs; + cxt->dev_path = NULL; + cxt->firstsector = NULL; + + cxt->io_size = 0; + cxt->optimal_io_size = 0; + cxt->min_io_size = 0; + cxt->phy_sector_size = 0; + cxt->sector_size = 0; + cxt->alignment_offset = 0; + cxt->grain = 0; + cxt->first_lba = 0; + cxt->total_sectors = 0; + + memset(&cxt->geom, 0, sizeof(struct fdisk_geometry)); + + cxt->label = NULL; } /** @@ -178,3 +182,22 @@ void fdisk_free_context(struct fdisk_context *cxt) free(cxt); } + +/** + * fdisk_context_set_ask: + * @cxt: context + * @ask_cb: callback + * @data: callback data + * + * Returns: 0 on sucess, < 0 on error. + */ +int fdisk_context_set_ask(struct fdisk_context *cxt, + int (*ask_cb)(struct fdisk_context *, struct fdisk_ask *, void *), + void *data) +{ + assert(cxt); + + cxt->ask_cb = ask_cb; + cxt->ask_data = data; + return 0; +} |