diff options
author | NeilBrown <neilb@suse.de> | 2009-07-14 11:29:20 +1000 |
---|---|---|
committer | NeilBrown <neilb@suse.de> | 2009-07-14 11:29:20 +1000 |
commit | 4a06e2c270948bdcfaa447c8a0e80abb0978b5c4 (patch) | |
tree | 51840f16e0bc5a6a9884788e858e87f84df887c3 /mdadm.c | |
parent | 84e11361aa37c92c3c016095e5db7f4fc434ac18 (diff) | |
download | mdadm-4a06e2c270948bdcfaa447c8a0e80abb0978b5c4.tar.gz mdadm-4a06e2c270948bdcfaa447c8a0e80abb0978b5c4.tar.xz mdadm-4a06e2c270948bdcfaa447c8a0e80abb0978b5c4.zip |
main: factor out code to parse layout for raid10 and faulty.
This will soon be called from multiple places.
Signed-off-by: NeilBrown <neilb@suse.de>
Diffstat (limited to 'mdadm.c')
-rw-r--r-- | mdadm.c | 27 |
1 files changed, 5 insertions, 22 deletions
@@ -107,7 +107,6 @@ int main(int argc, char *argv[]) int rebuild_map = 0; int auto_update_home = 0; - int copies; int print_help = 0; FILE *outf; @@ -478,38 +477,22 @@ int main(int argc, char *argv[]) break; case 10: - /* 'f', 'o' or 'n' followed by a number <= raid_disks */ - if ((optarg[0] != 'n' && optarg[0] != 'f' && optarg[0] != 'o') || - (copies = strtoul(optarg+1, &cp, 10)) < 1 || - copies > 200 || - *cp) { + layout = parse_layout_10(optarg); + if (layout < 0) { fprintf(stderr, Name ": layout for raid10 must be 'nNN', 'oNN' or 'fNN' where NN is a number, not %s\n", optarg); exit(2); } - if (optarg[0] == 'n') - layout = 256 + copies; - else if (optarg[0] == 'o') - layout = 0x10000 + (copies<<8) + 1; - else - layout = 1 + (copies<<8); break; case -5: /* Faulty * modeNNN */ - - { - int ln = strcspn(optarg, "0123456789"); - char *m = strdup(optarg); - int mode; - m[ln] = 0; - mode = map_name(faultylayout, m); - if (mode == UnSet) { + layout = parse_layout_faulty(optarg); + if (layout == -1) { fprintf(stderr, Name ": layout %s not understood for faulty.\n", optarg); exit(2); } - layout = mode | (atoi(optarg+ln)<< ModeShift); - } + break; } continue; |