Date: Sun, 8 Dec 2002 14:37:38 +0100 (CET) From: "Simon L.Nielsen" <simon@nitro.dk> To: FreeBSD-gnats-submit@FreeBSD.org Subject: bin/46096: [patch] Make atacontrol(8) give better errors Message-ID: <20021208133738.D9B3C10BF90@arthur.nitro.dk>
next in thread | raw e-mail | index | archive | help
>Number: 46096 >Category: bin >Synopsis: [patch] Make atacontrol(8) give better errors >Confidential: no >Severity: non-critical >Priority: low >Responsible: freebsd-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: sw-bug >Submitter-Id: current-users >Arrival-Date: Sun Dec 08 05:40:01 PST 2002 >Closed-Date: >Last-Modified: >Originator: Simon L. Nielsen <simon@nitro.dk> >Release: FreeBSD 4.7-STABLE i386 >Organization: >Environment: System: FreeBSD arthur.nitro.dk 4.7-STABLE FreeBSD 4.7-STABLE #0: Sun Dec 8 01:52:44 CET 2002 root@arthur.nitro.dk:/usr/obj/usr/src/sys/ARTHUR i386 >Description: This is a patch to make atacontrol(8) tell the user more about what the problem was when running atacontrol with incorrect parameters. The patch also makes atacontrol use sysexists.h instead of hard-coded exist levels. Note: The patch is for current, I'm just running stable on my workstation. >How-To-Repeat: N/A >Fix: --- atacontrol_useage.patch3 begins here --- Index: atacontrol.c =================================================================== RCS file: /home/mirror/freebsd/ncvs/src/sbin/atacontrol/atacontrol.c,v retrieving revision 1.19 diff -u -d -r1.19 atacontrol.c --- atacontrol.c 16 Sep 2002 08:34:08 -0000 1.19 +++ atacontrol.c 8 Dec 2002 13:14:35 -0000 @@ -37,6 +37,7 @@ #include <stdio.h> #include <stdlib.h> #include <string.h> +#include <sysexits.h> char * mode2str(int mode) @@ -83,8 +84,17 @@ void usage() { - fprintf(stderr, "usage: atacontrol <command> channel [args]\n"); - exit(1); + fprintf(stderr, "usage: atacontrol attach <channel>\n"); + fprintf(stderr, " atacontrol detach <channel>\n"); + fprintf(stderr, " atacontrol reinit <channel>\n"); + fprintf(stderr, " atacontrol create <type> [interleave] disk0 ... diskN\n"); + fprintf(stderr, " atacontrol delete <raid>\n"); + fprintf(stderr, " atacontrol status <raid> [mastermode slavemode]\n"); + fprintf(stderr, " atacontrol info <channel>\n"); + fprintf(stderr, " atacontrol cap <channel> <device>\n"); + fprintf(stderr, " atacontrol enclosure <channel> <device>\n"); + fprintf(stderr, " atacontrol list\n"); + exit(EX_USAGE); } int @@ -266,13 +276,17 @@ !strcmp(argv[1], "status") || !strcmp(argv[1], "rebuild")) { if (!(sscanf(argv[2], "%d", &chan) == 1 || - sscanf(argv[2], "ar%d", &chan) == 1)) - usage(); + sscanf(argv[2], "ar%d", &chan) == 1)) { + fprintf(stderr, "atacontrol: Invalid RAID device\n"); + exit(EX_USAGE); + } } else { if (!(sscanf(argv[2], "%d", &chan) == 1 || - sscanf(argv[2], "ata%d", &chan) == 1)) - usage(); + sscanf(argv[2], "ata%d", &chan) == 1)) { + fprintf(stderr, "atacontrol: Invalid ATA channel\n"); + exit(EX_USAGE); + } } iocmd.channel = chan; } @@ -328,13 +342,20 @@ iocmd.u.raid_setup.type = 3; if (!strcmp(argv[2], "SPAN") || !strcmp(argv[2], "JBOD")) iocmd.u.raid_setup.type = 4; - if (!iocmd.u.raid_setup.type) - usage(); + if (!iocmd.u.raid_setup.type) { + fprintf(stderr, "atacontrol: Invalid RAID type\n"); + fprintf(stderr, "atacontrol: Valid RAID types : \n"); + fprintf(stderr, " RAID0 | stripe | RAID1 | mirror " + "| RAID0+1 | SPAN | JBOD\n"); + exit(EX_USAGE); + } if (iocmd.u.raid_setup.type & 1) { if (!sscanf(argv[3], "%d", - &iocmd.u.raid_setup.interleave) == 1) - usage(); + &iocmd.u.raid_setup.interleave) == 1) { + fprintf(stderr, "atacontrol: Invalid interleave\n"); + exit(EX_USAGE); + } offset = 4; } else @@ -342,10 +363,20 @@ for (disk = 0; disk < 16 && (offset + disk) < argc; disk++) { if (!(sscanf(argv[offset + disk], "%d", &dev) == 1 || - sscanf(argv[offset + disk], "ad%d", &dev) == 1)) - usage(); + sscanf(argv[offset + disk], "ad%d", &dev) == 1)) { + fprintf(stderr, "atacontrol: Invalid device %s\n", + argv[offset + disk]); + exit(EX_USAGE); + } iocmd.u.raid_setup.disks[disk] = dev; } + + if(disk < 2) { + fprintf(stderr, "atacontrol: At least 2 disks must be " + "specified to create RAID\n"); + exit(EX_USAGE); + } + iocmd.u.raid_setup.total_disks = disk; if (ioctl(fd, IOCATA, &iocmd) < 0) err(1, "ioctl(ATARAIDCREATE)"); @@ -427,5 +458,5 @@ } else usage(); - exit(0); + exit(EX_OK); } --- atacontrol_useage.patch3 ends here --- >Release-Note: >Audit-Trail: >Unformatted: To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-bugs" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20021208133738.D9B3C10BF90>