From: Karel Zak Date: Thu, 7 Feb 2013 10:41:26 +0000 (+0100) Subject: libfdisk: add wrapper to ask for numbers X-Git-Tag: v2.23-rc1~111 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=24fc19a11ebc92ef9b33c464a121fe9717806937;p=thirdparty%2Futil-linux.git libfdisk: add wrapper to ask for numbers Signed-off-by: Karel Zak --- diff --git a/libfdisk/src/ask.c b/libfdisk/src/ask.c index 8d4ec12e61..3f8da0e65c 100644 --- a/libfdisk/src/ask.c +++ b/libfdisk/src/ask.c @@ -321,6 +321,42 @@ int fdisk_ask_partnum(struct fdisk_context *cxt, size_t *partnum, int wantnew) return rc; } +/* very basic wraper to ask numbers */ +int fdisk_ask_number(struct fdisk_context *cxt, + uintmax_t low, + uintmax_t dflt, + uintmax_t high, + const char *query, + uintmax_t *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_NUMBER); + if (!rc) + fdisk_ask_number_set_low(ask, low); + if (!rc) + fdisk_ask_number_set_default(ask, dflt); + if (!rc) + fdisk_ask_number_set_high(ask, high); + if (!rc) + fdisk_ask_set_query(ask, query); + if (!rc) + rc = fdisk_do_ask(cxt, ask); + if (!rc) + *result = fdisk_ask_number_get_result(ask); + + fdisk_free_ask(ask); + DBG(ASK, dbgprint("result: %zd [rc=%d]\n", *result, rc)); + return rc; +} + #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/libfdisk.h b/libfdisk/src/libfdisk.h index ec99d9f23e..f0f080e401 100644 --- a/libfdisk/src/libfdisk.h +++ b/libfdisk/src/libfdisk.h @@ -151,6 +151,14 @@ extern int fdisk_ask_number_set_result(struct fdisk_ask *ask, uint64_t result); extern int fdisk_ask_number_set_relative(struct fdisk_ask *ask, int relative); extern int fdisk_ask_number_is_relative(struct fdisk_ask *ask); + +extern int fdisk_ask_number(struct fdisk_context *cxt, + uintmax_t low, + uintmax_t dflt, + uintmax_t high, + const char *query, + uintmax_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, ...);