diff options
author | Karel Zak | 2013-02-11 11:41:19 +0100 |
---|---|---|
committer | Karel Zak | 2013-03-11 13:00:56 +0100 |
commit | ccf48af540cf5446778fff5085afa21d38cb173f (patch) | |
tree | 288ad064a7fd47a68ba4a2b88e32b5964fe63821 /libfdisk | |
parent | fdisk: (sun) use Ask API for new-partiton dialog (diff) | |
download | kernel-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.c | 41 | ||||
-rw-r--r-- | libfdisk/src/fdiskP.h | 4 | ||||
-rw-r--r-- | libfdisk/src/libfdisk.h | 7 |
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, ...); |