From: Wouter Verhelst Date: Thu, 20 May 2010 13:35:57 +0000 (+0200) Subject: Fix bugs in command-line argument handling X-Git-Url: http://git.alex.org.uk Fix bugs in command-line argument handling 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. --- diff --git a/nbd-client.c b/nbd-client.c index 3db56ac..97c8048 100644 --- a/nbd-client.c +++ b/nbd-client.c @@ -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;