From: NeilBrown Date: Tue, 3 Apr 2012 18:00:42 +0000 (+1000) Subject: parse_size: distinguish between 0 and error. X-Git-Tag: mdadm-3.2.4~35 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=15632a96f4e6919b4fa54c622e9e14d7fdae42d1;p=thirdparty%2Fmdadm.git parse_size: distinguish between 0 and error. It isn't sufficient to use '0' for 'error' as well will later have fields that can validly be '0'. So return "-1" on error. Also fix parsing of --bitmap_check so that '0' is treated as an error: we don't support 512B anyway. Signed-off-by: NeilBrown --- diff --git a/mdadm.c b/mdadm.c index 1efa3e80..4d4820d3 100644 --- a/mdadm.c +++ b/mdadm.c @@ -1056,15 +1056,14 @@ int main(int argc, char *argv[]) case O(BUILD,BitmapChunk): case O(CREATE,BitmapChunk): /* bitmap chunksize */ bitmap_chunk = parse_size(optarg); - if (bitmap_chunk < 0 || + if (bitmap_chunk <= 0 || bitmap_chunk & (bitmap_chunk - 1)) { fprintf(stderr, Name ": invalid bitmap chunksize: %s\n", optarg); exit(2); } - /* convert sectors to B, chunk of 0 means 512B */ - bitmap_chunk = bitmap_chunk ? bitmap_chunk * 512 : 512; + bitmap_chunk = bitmap_chunk * 512; continue; case O(GROW, WriteBehind): diff --git a/util.c b/util.c index d32e6506..b9420585 100644 --- a/util.c +++ b/util.c @@ -194,6 +194,7 @@ long long parse_size(char *size) * followed by 'K', 'M', or 'G'. * Without a suffix, K is assumed. * Number returned is in sectors (half-K) + * -1 returned on error. */ char *c; long long s = strtoll(size, &c, 10); @@ -215,7 +216,7 @@ long long parse_size(char *size) } } if (*c) - s = 0; + s = -1; return s; }