From 51d4261ca9fa5f1e6b09ff1e6891ae762ee60a57 Mon Sep 17 00:00:00 2001 From: Lukasz Dorau Date: Fri, 14 Sep 2012 16:12:45 +0200 Subject: [PATCH] fix: adjust parse_size() to the unsigned size variable An error in parse_size() should be reported by 0, not -1, because -1 is changed to the max value of unsigned long long during calculations of size (e.g. at mdadm.c:412). A negative value of size should be reported as error (e.g. size equal -1 has been changed to the max value of unsigned long long so far). Signed-off-by: Lukasz Dorau Signed-off-by: NeilBrown --- mdadm.h | 2 +- util.c | 9 +++++---- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/mdadm.h b/mdadm.h index 9feccc60..f202ffa6 100644 --- a/mdadm.h +++ b/mdadm.h @@ -1156,7 +1156,7 @@ extern unsigned long bitmap_sectors(struct bitmap_super_s *bsb); extern int md_get_version(int fd); extern int get_linux_version(void); extern int mdadm_version(char *version); -extern long long parse_size(char *size); +extern unsigned long long parse_size(char *size); extern int parse_uuid(char *str, int uuid[4]); extern int parse_layout_10(char *layout); extern int parse_layout_faulty(char *layout); diff --git a/util.c b/util.c index a92a663b..c63a232c 100644 --- a/util.c +++ b/util.c @@ -188,13 +188,13 @@ int mdadm_version(char *version) return (a*1000000)+(b*1000)+c; } -long long parse_size(char *size) +unsigned long long parse_size(char *size) { /* parse 'size' which should be a number optionally * followed by 'K', 'M', or 'G'. * Without a suffix, K is assumed. * Number returned is in sectors (half-K) - * -1 returned on error. + * 0 returned on error. */ char *c; long long s = strtoll(size, &c, 10); @@ -214,9 +214,10 @@ long long parse_size(char *size) s *= 1024 * 1024 * 2; break; } - } + } else + s = 0; if (*c) - s = -1; + s = 0; return s; } -- 2.39.2