Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/usr.sbin/bad144 Use getopt instead of manual command line gr...



details:   https://anonhg.NetBSD.org/src/rev/b4d8a5ce4631
branches:  trunk
changeset: 532707:b4d8a5ce4631
user:      wiz <wiz%NetBSD.org@localhost>
date:      Thu Jun 13 15:27:09 2002 +0000

description:
Use getopt instead of manual command line grovelling, put usage
in a function and adapt it the man page, and some lint cleanups.

diffstat:

 usr.sbin/bad144/bad144.c |  154 ++++++++++++++++++++++++----------------------
 1 files changed, 81 insertions(+), 73 deletions(-)

diffs (252 lines):

diff -r 808d14152d19 -r b4d8a5ce4631 usr.sbin/bad144/bad144.c
--- a/usr.sbin/bad144/bad144.c  Thu Jun 13 15:25:58 2002 +0000
+++ b/usr.sbin/bad144/bad144.c  Thu Jun 13 15:27:09 2002 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: bad144.c,v 1.18 2002/06/13 13:49:08 wiz Exp $  */
+/*     $NetBSD: bad144.c,v 1.19 2002/06/13 15:27:09 wiz Exp $  */
 
 /*
  * Copyright (c) 1980, 1986, 1988, 1993
@@ -43,7 +43,7 @@
 #if 0
 static char sccsid[] = "@(#)bad144.c   8.2 (Berkeley) 4/27/95";
 #else
-__RCSID("$NetBSD: bad144.c,v 1.18 2002/06/13 13:49:08 wiz Exp $");
+__RCSID("$NetBSD: bad144.c,v 1.19 2002/06/13 15:27:09 wiz Exp $");
 #endif
 #endif /* not lint */
 
@@ -79,16 +79,19 @@
 
 #define RETRIES        10              /* number of retries on reading old sectors */
 
-int    fflag, add, copy, verbose, nflag;
+#ifdef __vax__
+int    fflag;
+#endif
+int    add, copy, verbose, nflag;
 int    dups;
 int    badfile = -1;           /* copy of badsector table to use, -1 if any */
 #define MAXSECSIZE     1024
 struct dkbad curbad, oldbad;
 #define        DKBAD_MAGIC     0x4321
 
-char   label[BBSIZE];
 daddr_t        size;
 struct disklabel *dp;
+struct disklabel label;
 char   name[BUFSIZ];
 
 daddr_t        badsn(const struct bt_bad *);
@@ -99,86 +102,72 @@
 daddr_t        getold(int, struct dkbad *);
 int    main(int, char **);
 void   shift(int, int, int);
+void   usage(void);
+
+#ifdef __vax__
+#define OPTSTRING "01234acfvn"
+#else
+#define OPTSTRING "01234acvn"
+#endif
 
 int
 main(int argc, char *argv[])
 {
        struct bt_bad *bt;
        daddr_t sn, bn[NBT_BAD];
-       int i, f, nbad, new, bad, errs;
+       int i, f, nbad, new, bad, errs, ch;
        char diskname[MAXPATHLEN];
 
-       argc--, argv++;
-       while (argc > 0 && **argv == '-') {
-               (*argv)++;
-               while (**argv) {
-                       switch (**argv) {
-#if __vax__
-                           case 'f':
-                               fflag++;
-                               break;
+       while ((ch = getopt(argc, argv, OPTSTRING)) != -1) {
+               switch (ch) {
+               case '0':
+               case '1':
+               case '2':
+               case '3':
+               case '4':
+                       badfile = ch - '0';
+                       break;
+               case 'a':
+                       add = 1;
+                       break;
+               case 'c':
+                       copy = 1;
+                       break;
+#ifdef __vax__
+               case 'f':
+                       fflag = 1;
+                       break;
 #endif
-                           case 'a':
-                               add++;
-                               break;
-                           case 'c':
-                               copy++;
-                               break;
-                           case 'v':
-                               verbose++;
-                               break;
-                           case 'n':
-                               nflag++;
-                               verbose++;
-                               break;
-                           default:
-                               if (**argv >= '0' && **argv <= '4') {
-                                       badfile = **argv - '0';
-                                       break;
-                               }
-                               goto usage;
-                       }
-                       (*argv)++;
+               case 'n':
+                       nflag = 1;
+                       /* FALLTHROUGH */
+               case 'v':
+                       verbose = 1;
+                       break;
+               case '?':
+               default:
+                       usage();
                }
-               argc--, argv++;
        }
+
+       argc -= optind;
+       argv += optind;
+
        if (argc < 1) {
-usage:
-               fprintf(stderr,
-                   "usage: bad144 [ -f ] disk [ snum [ bn ... ] ]\n");
-               fprintf(stderr,
-                 "to read or overwrite bad-sector table, e.g.: bad144 hp0\n");
-               fprintf(stderr,
-                   "or bad144 -a [ -f ] [ -c ] disk  bn ...\n");
-               fprintf(stderr, "where options are:\n");
-               fprintf(stderr, "\t-a  add new bad sectors to the table\n");
-               fprintf(stderr, "\t-f  reformat listed sectors as bad\n");
-               fprintf(stderr, "\t-c  copy original sector to replacement\n");
-               exit(1);
+               usage();
        }
        f = opendisk(argv[0], argc == 1 ? O_RDONLY : O_RDWR, diskname,
            sizeof(diskname), 0);
        if (f < 0)
                err(4, "opendisk `%s'", diskname);
-#ifdef was
-       if (read(f, label, sizeof(label)) < 0) 
-               err(4, "read `%s'", diskname);
-       for (dp = (struct disklabel *)(label + LABELOFFSET);
-           dp < (struct disklabel *)
-               (label + sizeof(label) - sizeof(struct disklabel));
-           dp = (struct disklabel *)((char *)dp + 64))
-               if (dp->d_magic == DISKMAGIC && dp->d_magic2 == DISKMAGIC)
-                       break;
-#else
        /* obtain label and adjust to fit */
-       dp = (struct disklabel *)&label;
+       dp = &label;
        if (ioctl(f, DIOCGDINFO, dp) < 0)
                err(4, "ioctl DIOCGDINFO `%s'", diskname);
-#endif
        if (dp->d_magic != DISKMAGIC || dp->d_magic2 != DISKMAGIC
                /* dkcksum(lp) != 0 */ )
                errx(1, "Bad pack magic number (pack is unlabeled)");
-       if (dp->d_secsize > MAXSECSIZE || dp->d_secsize <= 0)
+       if (dp->d_secsize > MAXSECSIZE || dp->d_secsize == 0)
                errx(7, "Disk sector size too large/small (%d)",
                    dp->d_secsize);
 #ifdef __i386__
@@ -290,8 +279,8 @@
                qsort((char *)curbad.bt_bad, nbad, sizeof (struct bt_bad),
                    compare);
                if (dups)
-                       errx(3,
-"bad sectors have been duplicated; can't add existing sectors");
+                       errx(3, "bad sectors have been duplicated; "
+                           "can't add existing sectors");
                shift(f, nbad, nbad-new);
        }
        if (badfile == -1)
@@ -319,8 +308,8 @@
 #endif
 #ifdef DIOCSBAD
        if (nflag == 0 && ioctl(f, DIOCSBAD, (caddr_t)&curbad) < 0)
-               warnx(
-       "Can't sync bad-sector file; reboot for changes to take effect");
+               warnx("Can't sync bad-sector file; reboot for changes "
+                   "to take effect");
 #endif
        if ((dp->d_flags & D_BADSECT) == 0 && nflag == 0) {
                dp->d_flags |= D_BADSECT;
@@ -330,7 +319,7 @@
                            "Can't write label to enable bad sector handling");
                }
        }
-       exit(0);
+       return (0);
 }
 
 daddr_t
@@ -384,8 +373,8 @@
                if ((bt->bt_cyl >= dp->d_ncylinders) ||
                    ((bt->bt_trksec >> 8) >= dp->d_ntracks) ||
                    ((bt->bt_trksec & 0xff) >= dp->d_nsectors)) {
-                       warnx(
-"cyl/trk/sect out of range in existing entry: sn=%d, cn=%d, tn=%d, sn=%d",
+                       warnx("cyl/trk/sect out of range in existing entry: "
+                           "sn=%d, cn=%d, tn=%d, sn=%d",
                            badsn(bt), bt->bt_cyl, bt->bt_trksec>>8,
                            bt->bt_trksec & 0xff);
                        errors++;
@@ -489,11 +478,9 @@
 {
        char *zbuf;
 
-       if (zbuf == (char *)NULL) {
-               zbuf = malloc((unsigned)dp->d_secsize);
-               if (zbuf == (char *)NULL)
-                       errx(20, "Out of memory");
-       }
+       zbuf = calloc(1, (unsigned int)dp->d_secsize);
+       if (zbuf == NULL)
+               errx(20, "Out of memory");
        if (lseek(f, (off_t)(dp->d_secsize * sn), SEEK_SET) < 0)
                err(4, "lseek");
        if (verbose)
@@ -658,3 +645,24 @@
                warn("write format %d", blk);
 }
 #endif
+
+void
+usage(void)
+{
+
+       fprintf(stderr, "usage: bad144 [-%sv] disk [sno [bad ...]]\n"
+           "to read or overwrite the bad-sector table, e.g.: bad144 hp0\n"
+           "or bad144 -a [-c%sv] disk [bad ...]\n"
+           "where options are:\n"
+           "\t-a  add new bad sectors to the table\n"
+           "\t-c  copy original sector to replacement\n"
+           "%s"
+           "\t-v  verbose mode\n",
+#ifdef __vax__
+           "f", "f", "\t-f  reformat listed sectors as bad\n"
+#else
+           "", "", ""
+#endif
+           );
+       exit(1);
+}



Home | Main Index | Thread Index | Old Index