summaryrefslogtreecommitdiffstats
path: root/libfdisk/src/context.c
diff options
context:
space:
mode:
authorKarel Zak2013-01-28 16:14:21 +0100
committerKarel Zak2013-03-11 13:00:54 +0100
commit7845ca8dc28c93939d99a1d0564f97eddcba1079 (patch)
treedb23e3fa2004ad30bd4ddfad0ad252706aa55be6 /libfdisk/src/context.c
parentlibfdisk: fix gpt status, don't use xcalloc() in library (diff)
downloadkernel-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.c49
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;
+}