xl: fixup "xl save" command line handling.
authorIan Campbell <ian.campbell@citrix.com>
Tue, 27 Sep 2011 16:32:16 +0000 (17:32 +0100)
committerIan Campbell <ian.campbell@citrix.com>
Tue, 27 Sep 2011 16:32:16 +0000 (17:32 +0100)
The save file paramter is required so ensure we have enough arguments.

The config filename is optional so do not use argv[optind+3], which
may well happen to be NULL when the paramter is not present but
relying on that is pretty gross.

Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
Acked-by: Ian Jackson <ian.jackson@eu.citrix.com>
Committed-by: Ian Jackson <ian.jackson@eu.citrix.com>
tools/libxl/xl_cmdimpl.c

index 10a38c8520b338753b9fe07c6876441f8902ec64..fb6497bf5700bcad3ea50bd3f5a44fcafcefdc88 100644 (file)
@@ -2856,8 +2856,8 @@ int main_migrate_receive(int argc, char **argv)
 
 int main_save(int argc, char **argv)
 {
-    const char *filename = NULL, *p = NULL;
-    const char *config_filename;
+    const char *filename, *p;
+    const char *config_filename = NULL;
     int checkpoint = 0;
     int opt;
 
@@ -2871,14 +2871,16 @@ int main_save(int argc, char **argv)
         }
     }
 
-    if (argc-optind > 3) {
+    if (argc-optind < 2 || argc-optind > 3) {
         help("save");
         return 2;
     }
 
     p = argv[optind];
     filename = argv[optind + 1];
-    config_filename = argv[optind + 2];
+    if ( argc - optind >= 3 )
+        config_filename = argv[optind + 2];
+
     save_domain(p, filename, checkpoint, config_filename);
     return 0;
 }