diff options
author | Petr Uzel | 2011-09-19 15:29:13 +0200 |
---|---|---|
committer | Karel Zak | 2011-09-27 15:24:02 +0200 |
commit | b7767afc630d04b859428fbb23ee8d45a58822a8 (patch) | |
tree | fa87e051a442be763e40b255d849c4ebd3c063a4 | |
parent | sfdisk: get_disksize() returns long long (diff) | |
download | kernel-qcow2-util-linux-b7767afc630d04b859428fbb23ee8d45a58822a8.tar.gz kernel-qcow2-util-linux-b7767afc630d04b859428fbb23ee8d45a58822a8.tar.xz kernel-qcow2-util-linux-b7767afc630d04b859428fbb23ee8d45a58822a8.zip |
sfdisk: introduce get_ull() function
Signed-off-by: Petr Uzel <petr.uzel@suse.cz>
-rw-r--r-- | fdisk/sfdisk.c | 38 |
1 files changed, 38 insertions, 0 deletions
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 |