On Mon, Dec 02, 2002 at 01:37:52PM +0100, Thomas Quinot wrote:
> Le 2002-12-02, Peter Pentchev ?crivait :
> 
> > > Attached are two patches: a trivial one which just fixes up two problems
> > > in diskpart's argument parsing, and a more complex one, which does it
> > > "the right way" IMHO, using getopt(3).
> 
> The getopt-based version sounds better to me.
> 
> > +                   case 'd':
> > +                           dflag++;
> > +                           if (pflag)
> > +                                   usage();
> > +                           break;
> > +                           
> > +                   case 'p':
> > +                           if (dflag)
> > +                                   usage();
> > +                           pflag++;
> > +                           break;
> 
> I'd remove both tests and replace them with a single
>   if (pflag && dflag) usage()
> after all arguments have been processed.

Ahhh; of course this would be better.  Updated patch attached.

G'luck,
Peter

-- 
Peter Pentchev  [EMAIL PROTECTED]        [EMAIL PROTECTED]
PGP key:        http://people.FreeBSD.org/~roam/roam.key.asc
Key fingerprint FDBA FD79 C26F 3C51 C95E  DF9E ED18 B68D 1619 4553
If there were no counterfactuals, this sentence would not have been paradoxical.
Index: src/usr.sbin/diskpart/diskpart.c
===================================================================
RCS file: /home/ncvs/src/usr.sbin/diskpart/Attic/diskpart.c,v
retrieving revision 1.11.2.1
diff -u -r1.11.2.1 diskpart.c
--- src/usr.sbin/diskpart/diskpart.c    7 Jan 2002 06:00:23 -0000       1.11.2.1
+++ src/usr.sbin/diskpart/diskpart.c    2 Dec 2002 12:45:27 -0000
@@ -55,6 +55,7 @@
 #include <ctype.h>
 #include <err.h>
 #include <stdio.h>
+#include <unistd.h>
 
 #define        for_now                 /* show all of `c' partition for disklabel */
 #define        NPARTITIONS     8
@@ -126,22 +127,29 @@
        int threshhold, numcyls[NPARTITIONS], startcyl[NPARTITIONS];
        int totsize = 0;
        char *lp, *tyname;
+       int ch;
 
-       argc--, argv++;
+       while ((ch = getopt(argc, argv, "dps:")) != EOF)
+               switch (ch) {
+                       case 'd':
+                               dflag++;
+                               break;
+                               
+                       case 'p':
+                               pflag++;
+                               break;
+
+                       case 's':
+                               totsize = atoi(optarg);
+                               break;
+               }
+       argc -= optind;
+       argv += optind;
+
+       if (dflag && pflag)
+               usage();
        if (argc < 1)
                usage();
-       if (argc > 0 && strcmp(*argv, "-p") == 0) {
-               pflag++;
-               argc--, argv++;
-       }
-       if (argc > 0 && strcmp(*argv, "-d") == 0) {
-               dflag++;
-               argc--, argv++;
-       }
-       if (argc > 1 && strcmp(*argv, "-s") == 0) {
-               totsize = atoi(argv[1]);
-               argc += 2, argv += 2;
-       }
        dp = getdiskbyname(*argv);
        if (dp == NULL) {
                if (isatty(0))

Attachment: msg38429/pgp00000.pgp
Description: PGP signature

Reply via email to