summaryrefslogtreecommitdiffstats
path: root/sbin/atacontrol
diff options
context:
space:
mode:
authorphk <phk@FreeBSD.org>2008-03-16 17:54:55 +0000
committerphk <phk@FreeBSD.org>2008-03-16 17:54:55 +0000
commit2c03b45538040c4ab0266f2cfa5d8cf47346d65e (patch)
treecc250b516259cd5e7c9e4ef65f4b08ce7fda8e6a /sbin/atacontrol
parent0de51cf04743b1a9bde51b0b1738741bff8d884f (diff)
downloadFreeBSD-src-2c03b45538040c4ab0266f2cfa5d8cf47346d65e.zip
FreeBSD-src-2c03b45538040c4ab0266f2cfa5d8cf47346d65e.tar.gz
Un-cut&paste argument processing, fix things lint found.
Diffstat (limited to 'sbin/atacontrol')
-rw-r--r--sbin/atacontrol/atacontrol.c171
1 files changed, 67 insertions, 104 deletions
diff --git a/sbin/atacontrol/atacontrol.c b/sbin/atacontrol/atacontrol.c
index 529ba43..42ee65f 100644
--- a/sbin/atacontrol/atacontrol.c
+++ b/sbin/atacontrol/atacontrol.c
@@ -38,16 +38,7 @@
#include <string.h>
#include <sysexits.h>
-const char *mode2str(int mode);
-int str2mode(char *str);
-void usage(void);
-int version(int ver);
-void param_print(struct ata_params *parm);
-void cap_print(struct ata_params *parm);
-int ata_cap_print(int fd);
-int info_print(int fd, int channel, int prchan);
-
-const char *
+static const char *
mode2str(int mode)
{
switch (mode) {
@@ -72,7 +63,7 @@ mode2str(int mode)
}
}
-int
+static int
str2mode(char *str)
{
if (!strcasecmp(str, "BIOSPIO")) return ATA_PIO;
@@ -94,8 +85,8 @@ str2mode(char *str)
return -1;
}
-void
-usage()
+static void
+usage(void)
{
fprintf(stderr,
"usage: atacontrol <command> args:\n"
@@ -115,7 +106,7 @@ usage()
exit(EX_USAGE);
}
-int
+static int
version(int ver)
{
int bit;
@@ -128,7 +119,7 @@ version(int ver)
return 0;
}
-void
+static void
param_print(struct ata_params *parm)
{
printf("<%.40s/%.8s> ", parm->model, parm->revision);
@@ -144,7 +135,7 @@ param_print(struct ata_params *parm)
printf("ATA/ATAPI revision %d\n", version(parm->version_major));
}
-void
+static void
cap_print(struct ata_params *parm)
{
u_int32_t lbasize = (u_int32_t)parm->lba_size_1 |
@@ -256,18 +247,17 @@ cap_print(struct ata_params *parm)
ATA_ACOUSTIC_VENDOR(parm->acoustic));
}
-int
+static void
ata_cap_print(int fd)
{
struct ata_params params;
if (ioctl(fd, IOCATAGPARM, &params) < 0)
- return errno;
+ err(1, "ioctl(IOCATAGPARM)");
cap_print(&params);
- return 0;
}
-int
+static void
info_print(int fd, int channel, int prchan)
{
struct ata_ioc_devices devices;
@@ -275,7 +265,7 @@ info_print(int fd, int channel, int prchan)
devices.channel = channel;
if (ioctl(fd, IOCATADEVICES, &devices) < 0)
- return errno;
+ err(1, "ioctl(IOCATADEVICES)");
if (prchan)
printf("ATA channel %d:\n", channel);
@@ -293,32 +283,61 @@ info_print(int fd, int channel, int prchan)
}
else
printf(" no device present\n");
- return 0;
+}
+
+static int
+open_dev(const char *arg, int mode)
+{
+ int disk, fd;
+ char device[64];
+
+ if (!(sscanf(arg, "ad%d", &disk) == 1 ||
+ sscanf(arg, "acd%d", &disk) == 1 ||
+ sscanf(arg, "afd%d", &disk) == 1 ||
+ sscanf(arg, "ast%d", &disk) == 1)) {
+ fprintf(stderr, "atacontrol: Invalid device %s\n", arg);
+ exit(EX_USAGE);
+ }
+ sprintf(device, "/dev/%s", arg);
+ if ((fd = open(device, mode)) < 0)
+ err(1, "device not found");
+ return (fd);
+}
+
+static int
+ar_arg(const char *arg)
+{
+ int array;
+
+ if (!(sscanf(arg, "ar%d", &array) == 1)) {
+ fprintf(stderr, "atacontrol: Invalid array %s\n", arg);
+ exit(EX_USAGE);
+ }
+ return (array);
+}
+
+static int
+ata_arg(const char *arg)
+{
+ int channel;
+
+ if (!(sscanf(arg, "ata%d", &channel) == 1)) {
+ fprintf(stderr, "atacontrol: Invalid channel %s\n", arg);
+ exit(EX_USAGE);
+ }
+ return (channel);
}
int
main(int argc, char **argv)
{
- int fd;
+ int fd, mode, channel, array;
if (argc < 2)
usage();
if (!strcmp(argv[1], "mode") && (argc == 3 || argc == 4)) {
- int disk, mode;
- char device[64];
-
- if (!(sscanf(argv[2], "ad%d", &disk) == 1 ||
- sscanf(argv[2], "acd%d", &disk) == 1 ||
- sscanf(argv[2], "afd%d", &disk) == 1 ||
- sscanf(argv[2], "ast%d", &disk) == 1)) {
- fprintf(stderr, "atacontrol: Invalid device %s\n",
- argv[2]);
- exit(EX_USAGE);
- }
- sprintf(device, "/dev/%s", argv[2]);
- if ((fd = open(device, O_RDONLY)) < 0)
- err(1, "device not found");
+ fd = open_dev(argv[2], O_RDONLY);
if (argc == 4) {
mode = str2mode(argv[3]);
if (ioctl(fd, IOCATASMODE, &mode) < 0)
@@ -332,20 +351,7 @@ main(int argc, char **argv)
exit(EX_OK);
}
if (!strcmp(argv[1], "cap") && argc == 3) {
- int disk;
- char device[64];
-
- if (!(sscanf(argv[2], "ad%d", &disk) == 1 ||
- sscanf(argv[2], "acd%d", &disk) == 1 ||
- sscanf(argv[2], "afd%d", &disk) == 1 ||
- sscanf(argv[2], "ast%d", &disk) == 1)) {
- fprintf(stderr, "atacontrol: Invalid device %s\n",
- argv[2]);
- exit(EX_USAGE);
- }
- sprintf(device, "/dev/%s", argv[2]);
- if ((fd = open(device, O_RDONLY)) < 0)
- err(1, "device not found");
+ fd = open_dev(argv[2], O_RDONLY);
ata_cap_print(fd);
exit(EX_OK);
}
@@ -354,7 +360,7 @@ main(int argc, char **argv)
err(1, "control device not found");
if (!strcmp(argv[1], "list") && argc == 2) {
- int maxchannel, channel;
+ int maxchannel;
if (ioctl(fd, IOCATAGMAXCHANNEL, &maxchannel) < 0)
err(1, "ioctl(IOCATAGMAXCHANNEL)");
@@ -363,49 +369,25 @@ main(int argc, char **argv)
exit(EX_OK);
}
if (!strcmp(argv[1], "info") && argc == 3) {
- int channel;
-
- if (!(sscanf(argv[2], "ata%d", &channel) == 1)) {
- fprintf(stderr,
- "atacontrol: Invalid channel %s\n", argv[2]);
- exit(EX_USAGE);
- }
+ channel = ata_arg(argv[2]);
info_print(fd, channel, 0);
exit(EX_OK);
}
if (!strcmp(argv[1], "detach") && argc == 3) {
- int channel;
-
- if (!(sscanf(argv[2], "ata%d", &channel) == 1)) {
- fprintf(stderr,
- "atacontrol: Invalid channel %s\n", argv[2]);
- exit(EX_USAGE);
- }
+ channel = ata_arg(argv[2]);
if (ioctl(fd, IOCATADETACH, &channel) < 0)
err(1, "ioctl(IOCATADETACH)");
exit(EX_OK);
}
if (!strcmp(argv[1], "attach") && argc == 3) {
- int channel;
-
- if (!(sscanf(argv[2], "ata%d", &channel) == 1)) {
- fprintf(stderr,
- "atacontrol: Invalid channel %s\n", argv[2]);
- exit(EX_USAGE);
- }
+ channel = ata_arg(argv[2]);
if (ioctl(fd, IOCATAATTACH, &channel) < 0)
err(1, "ioctl(IOCATAATTACH)");
info_print(fd, channel, 0);
exit(EX_OK);
}
if (!strcmp(argv[1], "reinit") && argc == 3) {
- int channel;
-
- if (!(sscanf(argv[2], "ata%d", &channel) == 1)) {
- fprintf(stderr,
- "atacontrol: Invalid channel %s\n", argv[2]);
- exit(EX_USAGE);
- }
+ channel = ata_arg(argv[2]);
if (ioctl(fd, IOCATAREINIT, &channel) < 0)
warn("ioctl(IOCATAREINIT)");
info_print(fd, channel, 0);
@@ -483,13 +465,7 @@ main(int argc, char **argv)
exit(EX_OK);
}
if (!strcmp(argv[1], "delete") && argc == 3) {
- int array;
-
- if (!(sscanf(argv[2], "ar%d", &array) == 1)) {
- fprintf(stderr,
- "atacontrol: Invalid array %s\n", argv[2]);
- exit(EX_USAGE);
- }
+ array = ar_arg(argv[2]);
if (ioctl(fd, IOCATARAIDDELETE, &array) < 0)
warn("ioctl(IOCATARAIDDELETE)");
exit(EX_OK);
@@ -497,11 +473,7 @@ main(int argc, char **argv)
if (!strcmp(argv[1], "addspare") && argc == 4) {
struct ata_ioc_raid_config config;
- if (!(sscanf(argv[2], "ar%d", &config.lun) == 1)) {
- fprintf(stderr,
- "atacontrol: Invalid array %s\n", argv[2]);
- usage();
- }
+ config.lun = ar_arg(argv[2]);
if (!(sscanf(argv[3], "ad%d", &config.disks[0]) == 1)) {
fprintf(stderr,
"atacontrol: Invalid disk %s\n", argv[3]);
@@ -512,13 +484,7 @@ main(int argc, char **argv)
exit(EX_OK);
}
if (!strcmp(argv[1], "rebuild") && argc == 3) {
- int array;
-
- if (!(sscanf(argv[2], "ar%d", &array) == 1)) {
- fprintf(stderr,
- "atacontrol: Invalid array %s\n", argv[2]);
- usage();
- }
+ array = ar_arg(argv[2]);
if (ioctl(fd, IOCATARAIDREBUILD, &array) < 0)
warn("ioctl(IOCATARAIDREBUILD)");
else {
@@ -535,11 +501,7 @@ main(int argc, char **argv)
struct ata_ioc_raid_status status;
int i, lun, state;
- if (!(sscanf(argv[2], "ar%d", &status.lun) == 1)) {
- fprintf(stderr,
- "atacontrol: Invalid array %s\n", argv[2]);
- usage();
- }
+ status.lun = ar_arg(argv[2]);
if (ioctl(fd, IOCATARAIDSTATUS, &status) < 0)
err(1, "ioctl(IOCATARAIDSTATUS)");
@@ -559,6 +521,7 @@ main(int argc, char **argv)
break;
case AR_JBOD:
printf("JBOD");
+ break;
case AR_SPAN:
printf("SPAN");
break;
OpenPOWER on IntegriCloud