From c533a7a372ccdd286f03ecd2c5b8f1cdc3cfcc64 Mon Sep 17 00:00:00 2001 From: Wouter Verhelst Date: Thu, 20 May 2010 15:35:57 +0200 Subject: [PATCH] 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. --- nbd-client.c | 43 +++++++++++++++++++++++-------------------- 1 file changed, 23 insertions(+), 20 deletions(-) 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; -- 1.7.10.4