Change handling of devices names in args

Signed-off-by: Neil Brown <neilb@cse.unsw.edu.au>
This commit is contained in:
Neil Brown 2005-04-04 05:18:57 +00:00
parent a0ef61bfad
commit 0320ea4565
3 changed files with 38 additions and 5 deletions

View File

@ -16,6 +16,10 @@ Changes Prior to 1.9.0 release
- Make "mdadm -Ss" stop stacked devices properly, by reversing the
order in which arrays are stopped.
- Improve some error messages.
- Allow device name to appear before first option, so e.g.
mdadm /dev/md0 -A /dev/sd[ab]
works.
- Assume '-Q' if just a device is given, rather than being silent.
Changes Prior to 1.8.0 release
- Makefile cleanup from Luca Berra <bluca@comedia.it>

View File

@ -124,7 +124,7 @@ int Query(char *dev)
/* array might be active... */
mddev = get_md_name(super.md_minor);
disc.number = super.this_disk.number;
activity = "inactive";
activity = "undetected";
if (mddev && (fd = open(mddev, O_RDONLY))>=0) {
if (md_get_version(fd) >= 9000 &&
ioctl(fd, GET_ARRAY_INFO, &array)>= 0) {

37
mdadm.c
View File

@ -145,7 +145,8 @@ int main(int argc, char *argv[])
case 'a':
case 'r':
case 'f':
case 1 : if (!mode) newmode = MANAGE; break;
if (!mode) newmode = MANAGE;
break;
case 'A': newmode = ASSEMBLE; break;
case 'B': newmode = BUILD; break;
@ -186,11 +187,33 @@ int main(int argc, char *argv[])
fputs(Help_config, stderr);
exit(0);
}
/* If first option is a device, don't force the mode yet */
if (opt == 1) {
if (devs_found == 0) {
dv = malloc(sizeof(*dv));
if (dv == NULL) {
fprintf(stderr, Name ": malloc failed\n");
exit(3);
}
dv->devname = optarg;
dv->disposition = devmode;
dv->next = NULL;
*devlistend = dv;
devlistend = &dv->next;
devs_found++;
continue;
}
/* No mode yet, and this is the second device ... */
fprintf(stderr, Name ": An option must be given to set the mode before a second device is listed\n");
exit(2);
}
if (option_index >= 0)
fprintf(stderr, "--%s", long_options[option_index].name);
fprintf(stderr, Name ": --%s", long_options[option_index].name);
else
fprintf(stderr, "-%c", opt);
fprintf(stderr, " does not set the mode, and so cannot be first.\n");
fprintf(stderr, Name ": -%c", opt);
fprintf(stderr, " does not set the mode, and so cannot be the first option.\n");
exit(2);
}
@ -645,6 +668,12 @@ int main(int argc, char *argv[])
}
if (!mode && devs_found) {
mode = MISC;
devmode = 'Q';
if (devlist->disposition == 0)
devlist->disposition = devmode;
}
if (!mode) {
fputs(Usage, stderr);
exit(2);