From b7767afc630d04b859428fbb23ee8d45a58822a8 Mon Sep 17 00:00:00 2001 From: Petr Uzel Date: Mon, 19 Sep 2011 15:29:13 +0200 Subject: sfdisk: introduce get_ull() function Signed-off-by: Petr Uzel --- fdisk/sfdisk.c | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/fdisk/sfdisk.c b/fdisk/sfdisk.c index 9c94185bd..fe5190835 100644 --- a/fdisk/sfdisk.c +++ b/fdisk/sfdisk.c @@ -1861,6 +1861,44 @@ get_ul(char *u, unsigned long *up, unsigned long def, int base) { return 0; } + +/* read a number, use default if absent */ +/* a sign gives an offset from the default */ +static int +get_ull(char *u, unsigned long long *up, unsigned long long def, int base) { + char *nu; + int sign = 0; + unsigned long long val; + + if (*u == '+') { + sign = 1; + u++; + } else if (*u == '-') { + sign = -1; + u++; + } + if (*u) { + errno = 0; + val = strtoull(u, &nu, base); + if (errno == ERANGE) { + do_warn(_("number too big\n")); + return -1; + } + if (*nu) { + do_warn(_("trailing junk after number\n")); + return -1; + } + if (sign == 1) + val = def + val; + else if (sign == -1) + val = def - val; + *up = val; + } else + *up = def; + return 0; +} + + /* There are two common ways to structure extended partitions: as nested boxes, and as a chain. Sometimes the partitions must be given in order. Sometimes all logical partitions -- cgit v1.2.3-55-g7522