- strcpy(desc.ld_uuid, argv[1]);
- desc.ld_default_stripe_count = strtoul(argv[2], NULL, 0);
- desc.ld_default_stripe_size = strtoul(argv[3], NULL, 0);
- desc.ld_default_stripe_offset = (__u64) strtoul(argv[4], NULL, 0);
- desc.ld_pattern = strtoul(argv[5], NULL, 0);
+ strncpy(desc.ld_uuid, argv[1], sizeof(*uuidarray) - 1);
+ desc.ld_default_stripe_count = strtoul(argv[2], &end, 0);
+ if (*end) {
+ fprintf(stderr, "error: %s: bad default stripe count '%s'\n",
+ cmdname(argv[0]), argv[2]);
+ return CMD_HELP;
+ }
+ desc.ld_default_stripe_size = strtoul(argv[3], &end, 0);
+ if (*end) {
+ fprintf(stderr, "error: %s: bad default stripe size '%s'\n",
+ cmdname(argv[0]), argv[3]);
+ return CMD_HELP;
+ }
+ if (desc.ld_default_stripe_size < 4096) {
+ fprintf(stderr, "error: %s: stripe size %ld too small\n",
+ cmdname(argv[0]), (long)desc.ld_default_stripe_size);
+ return -EINVAL;
+ }
+ desc.ld_default_stripe_offset = (__u64) strtoul(argv[4], &end, 0);
+ if (*end) {
+ fprintf(stderr, "error: %s: bad default stripe offset '%s'\n",
+ cmdname(argv[0]), argv[4]);
+ return CMD_HELP;
+ }
+ desc.ld_pattern = strtoul(argv[5], &end, 0);
+ if (*end) {
+ fprintf(stderr, "error: %s: bad stripe pattern '%s'\n",
+ cmdname(argv[0]), argv[5]);
+ return CMD_HELP;
+ }