qemu-img rebase: Add -f option
Allow the user to specify the format of the image to rebase. Signed-off-by: Kevin Wolf <kwolf@redhat.com> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
This commit is contained in:
		
				
					committed by
					
						 Anthony Liguori
						Anthony Liguori
					
				
			
			
				
	
			
			
			
						parent
						
							37116c89cd
						
					
				
				
					commit
					e53dbee05d
				
			
							
								
								
									
										20
									
								
								qemu-img.c
									
									
									
									
									
								
							
							
						
						
									
										20
									
								
								qemu-img.c
									
									
									
									
									
								
							| @@ -1080,24 +1080,28 @@ static int img_snapshot(int argc, char **argv) | |||||||
| static int img_rebase(int argc, char **argv) | static int img_rebase(int argc, char **argv) | ||||||
| { | { | ||||||
|     BlockDriverState *bs, *bs_old_backing, *bs_new_backing; |     BlockDriverState *bs, *bs_old_backing, *bs_new_backing; | ||||||
|     BlockDriver *old_backing_drv, *new_backing_drv; |     BlockDriver *drv, *old_backing_drv, *new_backing_drv; | ||||||
|     char *filename; |     char *filename; | ||||||
|     const char *out_basefmt, *out_baseimg; |     const char *fmt, *out_basefmt, *out_baseimg; | ||||||
|     int c, flags, ret; |     int c, flags, ret; | ||||||
|     int unsafe = 0; |     int unsafe = 0; | ||||||
|  |  | ||||||
|     /* Parse commandline parameters */ |     /* Parse commandline parameters */ | ||||||
|  |     fmt = NULL; | ||||||
|     out_baseimg = NULL; |     out_baseimg = NULL; | ||||||
|     out_basefmt = NULL; |     out_basefmt = NULL; | ||||||
|  |  | ||||||
|     for(;;) { |     for(;;) { | ||||||
|         c = getopt(argc, argv, "uhF:b:"); |         c = getopt(argc, argv, "uhf:F:b:"); | ||||||
|         if (c == -1) |         if (c == -1) | ||||||
|             break; |             break; | ||||||
|         switch(c) { |         switch(c) { | ||||||
|         case 'h': |         case 'h': | ||||||
|             help(); |             help(); | ||||||
|             return 0; |             return 0; | ||||||
|  |         case 'f': | ||||||
|  |             fmt = optarg; | ||||||
|  |             break; | ||||||
|         case 'F': |         case 'F': | ||||||
|             out_basefmt = optarg; |             out_basefmt = optarg; | ||||||
|             break; |             break; | ||||||
| @@ -1124,8 +1128,16 @@ static int img_rebase(int argc, char **argv) | |||||||
|     if (!bs) |     if (!bs) | ||||||
|         error("Not enough memory"); |         error("Not enough memory"); | ||||||
|  |  | ||||||
|  |     drv = NULL; | ||||||
|  |     if (fmt) { | ||||||
|  |         drv = bdrv_find_format(fmt); | ||||||
|  |         if (drv == NULL) { | ||||||
|  |             error("Invalid format name: '%s'", fmt); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|     flags = BRDV_O_FLAGS | BDRV_O_RDWR | (unsafe ? BDRV_O_NO_BACKING : 0); |     flags = BRDV_O_FLAGS | BDRV_O_RDWR | (unsafe ? BDRV_O_NO_BACKING : 0); | ||||||
|     if (bdrv_open2(bs, filename, flags, NULL) < 0) { |     if (bdrv_open2(bs, filename, flags, drv) < 0) { | ||||||
|         error("Could not open '%s'", filename); |         error("Could not open '%s'", filename); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user