This is a patch for better (I think) error handling for pccardc.
(obtained from PAO3)
Please review.
--
Jun Kuriyama // kuriy...@sky.rim.or.jp
// kuriy...@freebsd.org
Index: pccardc/dumpcis.c
===================================================================
RCS file: /home/ncvs/src/usr.sbin/pccard/pccardc/dumpcis.c,v
retrieving revision 1.10
diff -u -r1.10 dumpcis.c
--- dumpcis.c 1999/02/05 16:00:15 1.10
+++ dumpcis.c 1999/02/13 04:33:28
@@ -43,7 +43,7 @@
int nocards;
-void
+static void
scan(slot)
int slot;
{
@@ -57,7 +57,8 @@
if (fd < 0)
return;
nocards++;
- ioctl(fd, PIOCGSTATE, &st);
+ if (ioctl(fd, PIOCGSTATE, &st))
+ err(1, "ioctl (PIOCGSTATE)");
if (st.state == filled) {
cp = readcis(fd);
if (cp) {
Index: pccardc/enabler.c
===================================================================
RCS file: /home/ncvs/src/usr.sbin/pccard/pccardc/enabler.c,v
retrieving revision 1.11
diff -u -r1.11 enabler.c
--- enabler.c 1999/02/05 16:00:15 1.11
+++ enabler.c 1999/02/13 03:50:51
@@ -126,7 +126,7 @@
err(1, "set I/O context");
}
if (ioctl(fd, PIOCSDRV, &drv))
- warn("set driver");
+ err(1, "set driver");
close(fd);
return 0;
}
@@ -138,9 +138,9 @@
usage(msg)
char *msg;
{
- warnx("enabler: %s", msg);
+ fprintf(stderr, "enabler: %s\n", msg);
fprintf(stderr,
-"usage: pccardc enabler slot driver [-m addr size] [-a iobase] [-i irq]\n");
+"Usage: enabler slot driver [-m addr size] [-a iobase] [-i irq]\n");
fprintf(stderr,
" -m card addr size : card address (hex), host address (hex) & size
(Kb)\n");
fprintf(stderr,
Index: pccardc/pccardc.c
===================================================================
RCS file: /home/ncvs/src/usr.sbin/pccard/pccardc/pccardc.c,v
retrieving revision 1.7
diff -u -r1.7 pccardc.c
--- pccardc.c 1998/02/26 14:36:01 1.7
+++ pccardc.c 1999/02/13 03:51:35
@@ -84,10 +84,11 @@
{
int i;
- fprintf(stderr, "usage: pccardc <subcommand> <arg> ...\n");
- fprintf(stderr, "subcommands:\n");
+ fprintf(stderr, "Usage:\n");
+ fprintf(stderr, "\t%s <subcommand> <arg> ...\n", argv[0]);
+ fprintf(stderr, "Subcommands:\n");
for (i = 0; subcommands[i].name; i++)
- fprintf(stderr, "\t%s\n\t\t%s\n",
+ fprintf(stderr, "\t%s\t: %s\n",
subcommands[i].name, subcommands[i].help);
return 1;
}
Index: pccardc/pccardmem.c
===================================================================
RCS file: /home/ncvs/src/usr.sbin/pccard/pccardc/pccardmem.c,v
retrieving revision 1.10
diff -u -r1.10 pccardmem.c
--- pccardmem.c 1999/02/05 16:00:15 1.10
+++ pccardmem.c 1999/02/13 04:02:59
@@ -37,13 +37,6 @@
#include <pccard/cardinfo.h>
-static void
-usage()
-{
- fprintf(stderr, "usage: pccardc pccardmem [memory-address]\n");
- exit(1);
-}
-
int
pccardmem_main(argc, argv)
int argc;
@@ -54,7 +47,8 @@
int fd;
if (argc > 2)
- usage();
+ errx(1, "Usage: %s pccardmem [ memory-address ]", argv[0]);
+
sprintf(name, CARD_DEVICE, 0);
fd = open(name, O_RDONLY);
if (fd < 0)
@@ -64,8 +58,8 @@
errx(1, "arg error");
}
if (ioctl(fd, PIOCRWMEM, &addr))
- warn("ioctl");
+ err(1, "ioctl (PIOCRWMEM)");
else
printf("PCCARD Memory address set to 0x%x\n", addr);
- exit(0);
+ return 0;
}
Index: pccardc/rdattr.c
===================================================================
RCS file: /home/ncvs/src/usr.sbin/pccard/pccardc/rdattr.c,v
retrieving revision 1.4
diff -u -r1.4 rdattr.c
--- rdattr.c 1998/02/27 08:00:18 1.4
+++ rdattr.c 1999/02/13 04:06:35
@@ -24,11 +24,13 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include <err.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/ioctl.h>
+
#include <pccard/cardinfo.h>
int
@@ -41,37 +43,31 @@
u_char *buf;
int fd;
off_t offs;
+
+ if (argc != 4)
+ errx(1, "Usage: %s rdattr slot offs length", argv[0]);
- if (argc != 4) {
- fprintf(stderr, "usage: %s rdattr slot offs length\n", argv[0]);
- exit(1);
- }
sprintf(name, CARD_DEVICE, atoi(argv[1]));
fd = open(name, O_RDONLY);
- if (fd < 0) {
- perror(name);
- exit(1);
- }
+ if (fd < 0)
+ err(1, "%s", name);
+
reg = MDF_ATTR;
- if (ioctl(fd, PIOCRWFLAG, ®)) {
- perror("ioctl (PIOCRWFLAG)");
- exit(1);
- }
+ if (ioctl(fd, PIOCRWFLAG, ®))
+ err(1, "ioctl (PIOCRWFLAG)");
+
if (sscanf(argv[2], "%x", ®) != 1 ||
- sscanf(argv[3], "%x", &length) != 1) {
- fprintf(stderr, "arg error\n");
- exit(1);
- }
+ sscanf(argv[3], "%x", &length) != 1)
+ errx(1, "arg error");
+
offs = reg;
- if ((buf = malloc(length)) == 0) {
- perror(name);
- exit(1);
- }
+ if ((buf = malloc(length)) == 0)
+ err(1, "%s", name);
+
lseek(fd, offs, SEEK_SET);
- if (read(fd, buf, length) != length) {
- perror(name);
- exit(1);
- }
+ if (read(fd, buf, length) != length)
+ err(1, "%s", name);
+
for (i = 0; i < length; i++) {
if (i % 16 == 0) {
printf("%04x: ", (int) offs + i);
Index: pccardc/rdmap.c
===================================================================
RCS file: /home/ncvs/src/usr.sbin/pccard/pccardc/rdmap.c,v
retrieving revision 1.10
diff -u -r1.10 rdmap.c
--- rdmap.c 1999/02/05 16:00:16 1.10
+++ rdmap.c 1999/02/13 04:09:23
@@ -29,6 +29,7 @@
"$Id: rdmap.c,v 1.10 1999/02/05 16:00:16 kuriyama Exp $";
#endif /* not lint */
+#include <err.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
@@ -39,7 +40,7 @@
#include <pccard/cardinfo.h>
#include <pccard/cis.h>
-void
+static void
dump_io(fd, nio)
int fd, nio;
{
@@ -48,13 +49,14 @@
for (i = 0; i < nio; i++) {
io.window = i;
- ioctl(fd, PIOCGIO, &io);
+ if (ioctl(fd, PIOCGIO, &io))
+ err(1, "ioctl (PIOCGIO)");
printf("I/O %d: flags 0x%03x port 0x%3x size %d bytes\n",
io.window, io.flags, io.start, io.size);
}
}
-void
+static void
dump_mem(fd, nmem)
int fd, nmem;
{
@@ -63,7 +65,8 @@
for (i = 0; i < nmem; i++) {
mem.window = i;
- ioctl(fd, PIOCGMEM, &mem);
+ if (ioctl(fd, PIOCGMEM, &mem))
+ err(1, "ioctl (PIOCGMEM)");
printf("Mem %d: flags 0x%03x host %p card %04lx size %d
bytes\n",
mem.window, mem.flags, mem.start, mem.card, mem.size);
}
@@ -81,7 +84,8 @@
fd = open(name, O_RDONLY);
if (fd < 0)
return;
- ioctl(fd, PIOCGSTATE, &st);
+ if (ioctl(fd, PIOCGSTATE, &st))
+ err(1, "ioctl (PIOCGSTATE)");
/*
if (st.state == filled)
*/
Index: pccardc/rdreg.c
===================================================================
RCS file: /home/ncvs/src/usr.sbin/pccard/pccardc/rdreg.c,v
retrieving revision 1.10
diff -u -r1.10 rdreg.c
--- rdreg.c 1999/02/05 16:00:16 1.10
+++ rdreg.c 1999/02/13 04:10:54
@@ -38,6 +38,7 @@
#include <sys/ioctl.h>
#include <pccard/cardinfo.h>
+
void
dumpslot(sl)
int sl;
@@ -47,7 +48,7 @@
struct pcic_reg r;
sprintf(name, CARD_DEVICE, sl);
- fd = open(name, O_RDWR);
+ fd = open(name, O_RDONLY);
if (fd < 0) {
warn("%s", name);
return;
@@ -55,7 +56,7 @@
printf("Registers for slot %d\n", sl);
for (r.reg = 0; r.reg < 0x40; r.reg++) {
if (ioctl(fd, PIOCGREG, &r)) {
- warn("ioctl");
+ warn("ioctl (PIOCGREG)");
break;
}
if ((r.reg % 16) == 0)
Index: pccardc/wrattr.c
===================================================================
RCS file: /home/ncvs/src/usr.sbin/pccard/pccardc/wrattr.c,v
retrieving revision 1.11
diff -u -r1.11 wrattr.c
--- wrattr.c 1999/02/05 16:00:16 1.11
+++ wrattr.c 1999/02/13 04:12:02
@@ -39,13 +39,6 @@
#include <pccard/cardinfo.h>
-static void
-usage()
-{
- fprintf(stderr, "usage: pccardc wrattr slot offs value\n");
- exit(1);
-}
-
int
wrattr_main(argc, argv)
int argc;
@@ -57,21 +50,25 @@
off_t offs;
if (argc != 4)
- usage();
+ errx(1, "Usage: %s wrattr slot offs value", argv[0]);
+
sprintf(name, CARD_DEVICE, atoi(argv[1]));
fd = open(name, O_RDWR);
if (fd < 0)
err(1, "%s", name);
+
reg = MDF_ATTR;
if (ioctl(fd, PIOCRWFLAG, ®))
err(1, "ioctl (PIOCRWFLAG)");
+
if (sscanf(argv[2], "%x", ®) != 1 ||
sscanf(argv[3], "%x", &value) != 1)
errx(1, "arg error");
+
offs = reg;
c = value;
lseek(fd, offs, SEEK_SET);
if (write(fd, &c, 1) != 1)
- warn("%s", name);
+ err(1, "%s", name);
return 0;
}
Index: pccardc/wrreg.c
===================================================================
RCS file: /home/ncvs/src/usr.sbin/pccard/pccardc/wrreg.c,v
retrieving revision 1.10
diff -u -r1.10 wrreg.c
--- wrreg.c 1999/02/05 16:00:16 1.10
+++ wrreg.c 1999/02/13 04:12:35
@@ -39,13 +39,6 @@
#include <pccard/cardinfo.h>
-static void
-usage()
-{
- fprintf(stderr, "usage: pccardc wrreg slot reg value\n");
- exit(1);
-}
-
int
wrreg_main(argc, argv)
int argc;
@@ -57,7 +50,8 @@
struct pcic_reg r;
if (argc != 4)
- usage();
+ errx(1, "Usage: %s wrreg slot reg value", argv[0]);
+
sprintf(name, CARD_DEVICE, atoi(argv[1]));
fd = open(name, O_RDWR);
if (fd < 0)
@@ -68,6 +62,6 @@
r.reg = reg;
r.value = value;
if (ioctl(fd, PIOCSREG, &r))
- warn("ioctl");
+ err(1, "ioctl (PIOCSREG)");
return 0;
}