qemu-img.c: Clean up handling of image size in img_create()
This cleans up the handling of image size in img_create() by parsing the value early, and then only setting it once if a value has been added as the last argument to the command line. Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com> Reviewed-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
		
							parent
							
								
									d8427002dc
								
							
						
					
					
						commit
						1da7cfbd01
					
				
							
								
								
									
										23
									
								
								qemu-img.c
									
									
									
									
									
								
							
							
						
						
									
										23
									
								
								qemu-img.c
									
									
									
									
									
								
							@ -282,6 +282,7 @@ static int add_old_style_options(const char *fmt, QEMUOptionParameter *list,
 | 
				
			|||||||
static int img_create(int argc, char **argv)
 | 
					static int img_create(int argc, char **argv)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    int c, ret = 0;
 | 
					    int c, ret = 0;
 | 
				
			||||||
 | 
					    uint64_t img_size = -1;
 | 
				
			||||||
    const char *fmt = "raw";
 | 
					    const char *fmt = "raw";
 | 
				
			||||||
    const char *base_fmt = NULL;
 | 
					    const char *base_fmt = NULL;
 | 
				
			||||||
    const char *filename;
 | 
					    const char *filename;
 | 
				
			||||||
@ -330,6 +331,20 @@ static int img_create(int argc, char **argv)
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
    filename = argv[optind++];
 | 
					    filename = argv[optind++];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /* Get image size, if specified */
 | 
				
			||||||
 | 
					    if (optind < argc) {
 | 
				
			||||||
 | 
					        ssize_t sval;
 | 
				
			||||||
 | 
					        sval = strtosz_suffix(argv[optind++], NULL, STRTOSZ_DEFSUFFIX_B);
 | 
				
			||||||
 | 
					        if (sval < 0) {
 | 
				
			||||||
 | 
					            error("Invalid image size specified! You may use k, M, G or "
 | 
				
			||||||
 | 
					                  "T suffixes for ");
 | 
				
			||||||
 | 
					            error("kilobytes, megabytes, gigabytes and terabytes.");
 | 
				
			||||||
 | 
					            ret = -1;
 | 
				
			||||||
 | 
					            goto out;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        img_size = (uint64_t)sval;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (options && !strcmp(options, "?")) {
 | 
					    if (options && !strcmp(options, "?")) {
 | 
				
			||||||
        ret = print_block_option_help(filename, fmt);
 | 
					        ret = print_block_option_help(filename, fmt);
 | 
				
			||||||
        goto out;
 | 
					        goto out;
 | 
				
			||||||
@ -357,7 +372,8 @@ static int img_create(int argc, char **argv)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    /* Create parameter list with default values */
 | 
					    /* Create parameter list with default values */
 | 
				
			||||||
    param = parse_option_parameters("", create_options, param);
 | 
					    param = parse_option_parameters("", create_options, param);
 | 
				
			||||||
    set_option_parameter_int(param, BLOCK_OPT_SIZE, -1);
 | 
					
 | 
				
			||||||
 | 
					    set_option_parameter_int(param, BLOCK_OPT_SIZE, img_size);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* Parse -o options */
 | 
					    /* Parse -o options */
 | 
				
			||||||
    if (options) {
 | 
					    if (options) {
 | 
				
			||||||
@ -369,11 +385,6 @@ static int img_create(int argc, char **argv)
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* Add size to parameters */
 | 
					 | 
				
			||||||
    if (optind < argc) {
 | 
					 | 
				
			||||||
        set_option_parameter(param, BLOCK_OPT_SIZE, argv[optind++]);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /* Add old-style options to parameters */
 | 
					    /* Add old-style options to parameters */
 | 
				
			||||||
    ret = add_old_style_options(fmt, param, base_filename, base_fmt);
 | 
					    ret = add_old_style_options(fmt, param, base_filename, base_fmt);
 | 
				
			||||||
    if (ret < 0) {
 | 
					    if (ret < 0) {
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user