qemu-img: move common options parsing before commands processing
This is necessary to enable creation of common qemu-img options which will be specified before command. The patch also enables '-V' alias to '--version' (exactly like in other block utilities) and documents this change. Signed-off-by: Denis V. Lunev <den@openvz.org> Reviewed-by: Eric Blake <eblake@redhat.com> Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com> Message-id: 1466174654-30130-7-git-send-email-den@openvz.org CC: Paolo Bonzini <pbonzini@redhat.com> CC: Kevin Wolf <kwolf@redhat.com> Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
This commit is contained in:
		
							parent
							
								
									39ca463e81
								
							
						
					
					
						commit
						10985131e3
					
				
							
								
								
									
										39
									
								
								qemu-img.c
									
									
									
									
									
								
							
							
						
						
									
										39
									
								
								qemu-img.c
									
									
									
									
									
								
							@ -91,9 +91,12 @@ static void QEMU_NORETURN help(void)
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
    const char *help_msg =
 | 
					    const char *help_msg =
 | 
				
			||||||
           QEMU_IMG_VERSION
 | 
					           QEMU_IMG_VERSION
 | 
				
			||||||
           "usage: qemu-img command [command options]\n"
 | 
					           "usage: qemu-img [standard options] command [command options]\n"
 | 
				
			||||||
           "QEMU disk image utility\n"
 | 
					           "QEMU disk image utility\n"
 | 
				
			||||||
           "\n"
 | 
					           "\n"
 | 
				
			||||||
 | 
					           "    '-h', '--help'       display this help and exit\n"
 | 
				
			||||||
 | 
					           "    '-V', '--version'    output version information and exit\n"
 | 
				
			||||||
 | 
					           "\n"
 | 
				
			||||||
           "Command syntax:\n"
 | 
					           "Command syntax:\n"
 | 
				
			||||||
#define DEF(option, callback, arg_string)        \
 | 
					#define DEF(option, callback, arg_string)        \
 | 
				
			||||||
           "  " arg_string "\n"
 | 
					           "  " arg_string "\n"
 | 
				
			||||||
@ -3806,7 +3809,7 @@ int main(int argc, char **argv)
 | 
				
			|||||||
    int c;
 | 
					    int c;
 | 
				
			||||||
    static const struct option long_options[] = {
 | 
					    static const struct option long_options[] = {
 | 
				
			||||||
        {"help", no_argument, 0, 'h'},
 | 
					        {"help", no_argument, 0, 'h'},
 | 
				
			||||||
        {"version", no_argument, 0, 'v'},
 | 
					        {"version", no_argument, 0, 'V'},
 | 
				
			||||||
        {0, 0, 0, 0}
 | 
					        {0, 0, 0, 0}
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -3829,27 +3832,37 @@ int main(int argc, char **argv)
 | 
				
			|||||||
    if (argc < 2) {
 | 
					    if (argc < 2) {
 | 
				
			||||||
        error_exit("Not enough arguments");
 | 
					        error_exit("Not enough arguments");
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    cmdname = argv[1];
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    qemu_add_opts(&qemu_object_opts);
 | 
					    qemu_add_opts(&qemu_object_opts);
 | 
				
			||||||
    qemu_add_opts(&qemu_source_opts);
 | 
					    qemu_add_opts(&qemu_source_opts);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* find the command */
 | 
					    while ((c = getopt_long(argc, argv, "+hV", long_options, NULL)) != -1) {
 | 
				
			||||||
    for (cmd = img_cmds; cmd->name != NULL; cmd++) {
 | 
					        switch (c) {
 | 
				
			||||||
        if (!strcmp(cmdname, cmd->name)) {
 | 
					        case 'h':
 | 
				
			||||||
            return cmd->handler(argc - 1, argv + 1);
 | 
					            help();
 | 
				
			||||||
 | 
					            return 0;
 | 
				
			||||||
 | 
					        case 'V':
 | 
				
			||||||
 | 
					            printf(QEMU_IMG_VERSION);
 | 
				
			||||||
 | 
					            return 0;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    c = getopt_long(argc, argv, "h", long_options, NULL);
 | 
					    cmdname = argv[optind];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (c == 'h') {
 | 
					    /* reset getopt_long scanning */
 | 
				
			||||||
        help();
 | 
					    argc -= optind;
 | 
				
			||||||
    }
 | 
					    if (argc < 1) {
 | 
				
			||||||
    if (c == 'v') {
 | 
					 | 
				
			||||||
        printf(QEMU_IMG_VERSION);
 | 
					 | 
				
			||||||
        return 0;
 | 
					        return 0;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					    argv += optind;
 | 
				
			||||||
 | 
					    optind = 1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /* find the command */
 | 
				
			||||||
 | 
					    for (cmd = img_cmds; cmd->name != NULL; cmd++) {
 | 
				
			||||||
 | 
					        if (!strcmp(cmdname, cmd->name)) {
 | 
				
			||||||
 | 
					            return cmd->handler(argc, argv);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* not found */
 | 
					    /* not found */
 | 
				
			||||||
    error_exit("Command not found: %s", cmdname);
 | 
					    error_exit("Command not found: %s", cmdname);
 | 
				
			||||||
 | 
				
			|||||||
@ -1,6 +1,6 @@
 | 
				
			|||||||
@example
 | 
					@example
 | 
				
			||||||
@c man begin SYNOPSIS
 | 
					@c man begin SYNOPSIS
 | 
				
			||||||
@command{qemu-img} @var{command} [@var{command} @var{options}]
 | 
					@command{qemu-img} [@var{standard} @var{options}] @var{command} [@var{command} @var{options}]
 | 
				
			||||||
@c man end
 | 
					@c man end
 | 
				
			||||||
@end example
 | 
					@end example
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -16,6 +16,14 @@ inconsistent state.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
@c man begin OPTIONS
 | 
					@c man begin OPTIONS
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Standard options:
 | 
				
			||||||
 | 
					@table @option
 | 
				
			||||||
 | 
					@item -h, --help
 | 
				
			||||||
 | 
					Display this help and exit
 | 
				
			||||||
 | 
					@item -V, --version
 | 
				
			||||||
 | 
					Display version information and exit
 | 
				
			||||||
 | 
					@end table
 | 
				
			||||||
 | 
					
 | 
				
			||||||
The following commands are supported:
 | 
					The following commands are supported:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@include qemu-img-cmds.texi
 | 
					@include qemu-img-cmds.texi
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user