Fix bugs in command-line argument handling
authorWouter Verhelst <w@uter.be>
Thu, 20 May 2010 13:35:57 +0000 (15:35 +0200)
committerWouter Verhelst <w@uter.be>
Thu, 20 May 2010 13:35:57 +0000 (15:35 +0200)
We produced an error message when all four flags were used; and we would
only catch such flags if they were produced in the right order (which
was different from the order in the manpage).

Thanks to Fan Zhang for catching these.

nbd-client.c

index 3db56ac..97c8048 100644 (file)
@@ -234,6 +234,7 @@ int main(int argc, char *argv[]) {
        int nofork=0;
        u64 size64;
        u32 flags;
+       int i;
 
        logging();
 
@@ -302,29 +303,31 @@ int main(int argc, char *argv[]) {
          err("Cannot open NBD: %m\nPlease ensure the 'nbd' module is loaded.");
        ++argv; --argc; /* skip device */
 
-       if (argc>3) goto errmsg;
-       if (argc) {
-               if(strncmp(argv[0], "-swap", 5)==0) {
-                       swap=1;
-                       ++argv;--argc;
+       if (argc>4) goto errmsg;
+       for(i=0; i<4; i++) {
+               if (argc) {
+                       if(strncmp(argv[0], "-swap", 5)==0) {
+                               swap=1;
+                               ++argv;--argc;
+                       }
                }
-       }
-       if (argc) {
-               if(strncmp(argv[0], "-persist", 8)==0) {
-                       cont=1;
-                       ++argv;--argc;
+               if (argc) {
+                       if(strncmp(argv[0], "-persist", 8)==0) {
+                               cont=1;
+                               ++argv;--argc;
+                       }
                }
-       }
-       if (argc) {
-               if(strncmp(argv[0], "-sdp", 4)==0) {
-                       sdp=1;
-                       ++argv;--argc;
+               if (argc) {
+                       if(strncmp(argv[0], "-sdp", 4)==0) {
+                               sdp=1;
+                               ++argv;--argc;
+                       }
                }
-       }
-       if (argc) {
-               if(strncmp(argv[0], "-nofork", 7)==0) {
-                       nofork=1;
-                       ++argv;--argc;
+               if (argc) {
+                       if(strncmp(argv[0], "-nofork", 7)==0) {
+                               nofork=1;
+                               ++argv;--argc;
+                       }
                }
        }
        if(argc) goto errmsg;