Allow parse_size to return 0.
We will shortly introduce --data-offset= which is allowed to be zero. We will want to use parse_size() so it needs to be able to return '0' without it being an error. So define INVALID_SECTORS to be an impossible value (currently '1') and return and test for it consistently. Signed-off-by: NeilBrown <neilb@suse.de>
This commit is contained in:
parent
7103b9b88d
commit
822e393a05
12
mdadm.c
12
mdadm.c
|
@ -372,7 +372,8 @@ int main(int argc, char *argv[])
|
|||
exit(2);
|
||||
}
|
||||
s.chunk = parse_size(optarg);
|
||||
if (s.chunk < 8 || (s.chunk&1)) {
|
||||
if (s.chunk == INVALID_SECTORS ||
|
||||
s.chunk < 8 || (s.chunk&1)) {
|
||||
pr_err("invalid chunk/rounding value: %s\n",
|
||||
optarg);
|
||||
exit(2);
|
||||
|
@ -426,7 +427,8 @@ int main(int argc, char *argv[])
|
|||
s.size = MAX_SIZE;
|
||||
else {
|
||||
s.size = parse_size(optarg);
|
||||
if (s.size < 8) {
|
||||
if (s.size == INVALID_SECTORS ||
|
||||
s.size < 8) {
|
||||
pr_err("invalid size: %s\n",
|
||||
optarg);
|
||||
exit(2);
|
||||
|
@ -446,7 +448,8 @@ int main(int argc, char *argv[])
|
|||
array_size = MAX_SIZE;
|
||||
else {
|
||||
array_size = parse_size(optarg);
|
||||
if (array_size <= 0) {
|
||||
if (array_size == 0 ||
|
||||
array_size == INVALID_SECTORS) {
|
||||
pr_err("invalid array size: %s\n",
|
||||
optarg);
|
||||
exit(2);
|
||||
|
@ -1062,7 +1065,8 @@ int main(int argc, char *argv[])
|
|||
case O(BUILD,BitmapChunk):
|
||||
case O(CREATE,BitmapChunk): /* bitmap chunksize */
|
||||
s.bitmap_chunk = parse_size(optarg);
|
||||
if (s.bitmap_chunk <= 0 ||
|
||||
if (s.bitmap_chunk == 0 ||
|
||||
s.bitmap_chunk == INVALID_SECTORS ||
|
||||
s.bitmap_chunk & (s.bitmap_chunk - 1)) {
|
||||
pr_err("invalid bitmap chunksize: %s\n",
|
||||
optarg);
|
||||
|
|
6
mdadm.h
6
mdadm.h
|
@ -1460,4 +1460,10 @@ char *xstrdup(const char *str);
|
|||
* In those cases with use MAX_SIZE
|
||||
*/
|
||||
#define MAX_SIZE 1
|
||||
|
||||
/* We want to use unsigned numbers for sector counts, but need
|
||||
* a value for 'invalid'. Use '1'.
|
||||
*/
|
||||
#define INVALID_SECTORS 1
|
||||
|
||||
extern int __offroot;
|
||||
|
|
6
util.c
6
util.c
|
@ -194,7 +194,7 @@ unsigned 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)
|
||||
* 0 returned on error.
|
||||
* INVALID_SECTORS returned on error.
|
||||
*/
|
||||
char *c;
|
||||
long long s = strtoll(size, &c, 10);
|
||||
|
@ -215,9 +215,9 @@ unsigned long long parse_size(char *size)
|
|||
break;
|
||||
}
|
||||
} else
|
||||
s = 0;
|
||||
s = INVALID_SECTORS;
|
||||
if (*c)
|
||||
s = 0;
|
||||
s = INVALID_SECTORS;
|
||||
return s;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue