summaryrefslogtreecommitdiffstats
path: root/libfdisk
diff options
context:
space:
mode:
authorKarel Zak2013-02-11 11:41:19 +0100
committerKarel Zak2013-03-11 13:00:56 +0100
commitccf48af540cf5446778fff5085afa21d38cb173f (patch)
tree288ad064a7fd47a68ba4a2b88e32b5964fe63821 /libfdisk
parentfdisk: (sun) use Ask API for new-partiton dialog (diff)
downloadkernel-qcow2-util-linux-ccf48af540cf5446778fff5085afa21d38cb173f.tar.gz
kernel-qcow2-util-linux-ccf48af540cf5446778fff5085afa21d38cb173f.tar.xz
kernel-qcow2-util-linux-ccf48af540cf5446778fff5085afa21d38cb173f.zip
libfdisk: add Yes/No to Ask API
Signed-off-by: Karel Zak <kzak@redhat.com>
Diffstat (limited to 'libfdisk')
-rw-r--r--libfdisk/src/ask.c41
-rw-r--r--libfdisk/src/fdiskP.h4
-rw-r--r--libfdisk/src/libfdisk.h7
3 files changed, 51 insertions, 1 deletions
diff --git a/libfdisk/src/ask.c b/libfdisk/src/ask.c
index 3f8da0e65..8bb7e9464 100644
--- a/libfdisk/src/ask.c
+++ b/libfdisk/src/ask.c
@@ -357,6 +357,47 @@ int fdisk_ask_number(struct fdisk_context *cxt,
return rc;
}
+int fdisk_ask_yesno(struct fdisk_context *cxt,
+ const char *query,
+ int *result)
+{
+ struct fdisk_ask *ask;
+ int rc;
+
+ assert(cxt);
+
+ ask = fdisk_new_ask();
+ if (!ask)
+ return -ENOMEM;
+
+ rc = fdisk_ask_set_type(ask, FDISK_ASKTYPE_YESNO);
+ if (!rc)
+ fdisk_ask_set_query(ask, query);
+ if (!rc)
+ rc = fdisk_do_ask(cxt, ask);
+ if (!rc)
+ *result = fdisk_ask_yesno_get_result(ask);
+
+ fdisk_free_ask(ask);
+ DBG(ASK, dbgprint("result: %d [rc=%d]\n", *result, rc));
+ return rc;
+}
+
+uint64_t fdisk_ask_yesno_get_result(struct fdisk_ask *ask)
+{
+ assert(ask);
+ assert(fdisk_is_ask(ask, YESNO));
+ return ask->data.yesno.result;
+}
+
+int fdisk_ask_yesno_set_result(struct fdisk_ask *ask, uint64_t result)
+{
+ assert(ask);
+ ask->data.yesno.result = result;
+ return 0;
+}
+
+
#define is_print_ask(a) (fdisk_is_ask(a, WARN) || fdisk_is_ask(a, WARNX) || fdisk_is_ask(a, INFO))
int fdisk_ask_print_get_errno(struct fdisk_ask *ask)
diff --git a/libfdisk/src/fdiskP.h b/libfdisk/src/fdiskP.h
index 3c180639e..ab4174086 100644
--- a/libfdisk/src/fdiskP.h
+++ b/libfdisk/src/fdiskP.h
@@ -234,6 +234,10 @@ struct fdisk_ask {
unsigned int has_va:1;
int errnum; /* errno */
} print;
+ /* FDISK_ASKTYPE_YESNO */
+ struct ask_yesno {
+ int result; /* TRUE or FALSE */
+ } yesno;
} data;
};
diff --git a/libfdisk/src/libfdisk.h b/libfdisk/src/libfdisk.h
index f0f080e40..f34d487d1 100644
--- a/libfdisk/src/libfdisk.h
+++ b/libfdisk/src/libfdisk.h
@@ -58,7 +58,8 @@ enum {
FDISK_ASKTYPE_OFFSET,
FDISK_ASKTYPE_WARN,
FDISK_ASKTYPE_WARNX,
- FDISK_ASKTYPE_INFO
+ FDISK_ASKTYPE_INFO,
+ FDISK_ASKTYPE_YESNO
};
/* init.c */
@@ -159,6 +160,10 @@ extern int fdisk_ask_number(struct fdisk_context *cxt,
const char *query,
uintmax_t *result);
+extern int fdisk_ask_yesno(struct fdisk_context *cxt, const char *query, int *result);
+extern uint64_t fdisk_ask_yesno_get_result(struct fdisk_ask *ask);
+extern int fdisk_ask_yesno_set_result(struct fdisk_ask *ask, uint64_t result);
+
extern int fdisk_info(struct fdisk_context *cxt, const char *fmt, ...);
extern int fdisk_warnx(struct fdisk_context *cxt, const char *fmt, ...);
extern int fdisk_warn(struct fdisk_context *cxt, const char *fmt, ...);