]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
libfdisk: add wrapper to ask for numbers
authorKarel Zak <kzak@redhat.com>
Thu, 7 Feb 2013 10:41:26 +0000 (11:41 +0100)
committerKarel Zak <kzak@redhat.com>
Mon, 11 Mar 2013 12:00:55 +0000 (13:00 +0100)
Signed-off-by: Karel Zak <kzak@redhat.com>
libfdisk/src/ask.c
libfdisk/src/libfdisk.h

index 8d4ec12e616a8d7c5b4587d00d5cd46ef821676b..3f8da0e65c02ca64b19cce4a53254ff43c6fd42f 100644 (file)
@@ -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)
index ec99d9f23ed73bbb59c660fcdf0cfc18de99f3fc..f0f080e401be40740c0f16d64e72511a9af40634 100644 (file)
@@ -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, ...);