diff options
author | Lukasz Dorau <lukasz.dorau@intel.com> | 2012-09-14 16:12:45 +0200 |
---|---|---|
committer | NeilBrown <neilb@suse.de> | 2012-09-20 12:27:17 +1000 |
commit | 51d4261ca9fa5f1e6b09ff1e6891ae762ee60a57 (patch) | |
tree | 2362df500201b978de0cc23b58280a1758bb63eb | |
parent | d5d2c614739a2370e295d9e83594b9c52a11b887 (diff) |
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 <lukasz.dorau@intel.com>
Signed-off-by: NeilBrown <neilb@suse.de>
-rw-r--r-- | mdadm.h | 2 | ||||
-rw-r--r-- | util.c | 9 |
2 files changed, 6 insertions, 5 deletions
@@ -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); @@ -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; } |