Makefile: clean timestamp generation rule
[sdk/emulator/qemu.git] / qemu-img.c
1 /*
2  * QEMU disk image utility
3  *
4  * Copyright (c) 2003-2008 Fabrice Bellard
5  *
6  * Permission is hereby granted, free of charge, to any person obtaining a copy
7  * of this software and associated documentation files (the "Software"), to deal
8  * in the Software without restriction, including without limitation the rights
9  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10  * copies of the Software, and to permit persons to whom the Software is
11  * furnished to do so, subject to the following conditions:
12  *
13  * The above copyright notice and this permission notice shall be included in
14  * all copies or substantial portions of the Software.
15  *
16  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
19  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22  * THE SOFTWARE.
23  */
24 #include "qapi-visit.h"
25 #include "qapi/qmp-output-visitor.h"
26 #include "qapi/qmp/qjson.h"
27 #include "qemu-common.h"
28 #include "qemu/option.h"
29 #include "qemu/error-report.h"
30 #include "qemu/osdep.h"
31 #include "sysemu/sysemu.h"
32 #include "block/block_int.h"
33 #include <getopt.h>
34 #include <stdio.h>
35
36 #ifdef _WIN32
37 #include <windows.h>
38 #endif
39
40 typedef struct img_cmd_t {
41     const char *name;
42     int (*handler)(int argc, char **argv);
43 } img_cmd_t;
44
45 /* Default to cache=writeback as data integrity is not important for qemu-tcg. */
46 #define BDRV_O_FLAGS BDRV_O_CACHE_WB
47 #define BDRV_DEFAULT_CACHE "writeback"
48
49 static void format_print(void *opaque, const char *name)
50 {
51     printf(" %s", name);
52 }
53
54 /* Please keep in synch with qemu-img.texi */
55 static void help(void)
56 {
57     const char *help_msg =
58            "qemu-img version " QEMU_VERSION ", Copyright (c) 2004-2008 Fabrice Bellard\n"
59            "usage: qemu-img command [command options]\n"
60            "QEMU disk image utility\n"
61            "\n"
62            "Command syntax:\n"
63 #define DEF(option, callback, arg_string)        \
64            "  " arg_string "\n"
65 #include "qemu-img-cmds.h"
66 #undef DEF
67 #undef GEN_DOCS
68            "\n"
69            "Command parameters:\n"
70            "  'filename' is a disk image filename\n"
71            "  'fmt' is the disk image format. It is guessed automatically in most cases\n"
72            "  'cache' is the cache mode used to write the output disk image, the valid\n"
73            "    options are: 'none', 'writeback' (default, except for convert), 'writethrough',\n"
74            "    'directsync' and 'unsafe' (default for convert)\n"
75            "  'size' is the disk image size in bytes. Optional suffixes\n"
76            "    'k' or 'K' (kilobyte, 1024), 'M' (megabyte, 1024k), 'G' (gigabyte, 1024M)\n"
77            "    and T (terabyte, 1024G) are supported. 'b' is ignored.\n"
78            "  'output_filename' is the destination disk image filename\n"
79            "  'output_fmt' is the destination format\n"
80            "  'options' is a comma separated list of format specific options in a\n"
81            "    name=value format. Use -o ? for an overview of the options supported by the\n"
82            "    used format\n"
83            "  '-c' indicates that target image must be compressed (qcow format only)\n"
84            "  '-u' enables unsafe rebasing. It is assumed that old and new backing file\n"
85            "       match exactly. The image doesn't need a working backing file before\n"
86            "       rebasing in this case (useful for renaming the backing file)\n"
87            "  '-h' with or without a command shows this help and lists the supported formats\n"
88            "  '-p' show progress of command (only certain commands)\n"
89            "  '-S' indicates the consecutive number of bytes that must contain only zeros\n"
90            "       for qemu-img to create a sparse image during conversion\n"
91            "  '--output' takes the format in which the output must be done (human or json)\n"
92            "\n"
93            "Parameters to check subcommand:\n"
94            "  '-r' tries to repair any inconsistencies that are found during the check.\n"
95            "       '-r leaks' repairs only cluster leaks, whereas '-r all' fixes all\n"
96            "       kinds of errors, with a higher risk of choosing the wrong fix or\n"
97            "       hiding corruption that has already occurred.\n"
98            "\n"
99            "Parameters to snapshot subcommand:\n"
100            "  'snapshot' is the name of the snapshot to create, apply or delete\n"
101            "  '-a' applies a snapshot (revert disk to saved state)\n"
102            "  '-c' creates a snapshot\n"
103            "  '-d' deletes a snapshot\n"
104            "  '-l' lists all snapshots in the given image\n";
105
106     printf("%s\nSupported formats:", help_msg);
107     bdrv_iterate_format(format_print, NULL);
108     printf("\n");
109     exit(1);
110 }
111
112 #if defined(WIN32)
113 /* XXX: put correct support for win32 */
114 static int read_password(char *buf, int buf_size)
115 {
116     int c, i;
117     printf("Password: ");
118     fflush(stdout);
119     i = 0;
120     for(;;) {
121         c = getchar();
122         if (c == '\n')
123             break;
124         if (i < (buf_size - 1))
125             buf[i++] = c;
126     }
127     buf[i] = '\0';
128     return 0;
129 }
130
131 #else
132
133 #include <termios.h>
134
135 static struct termios oldtty;
136
137 static void term_exit(void)
138 {
139     tcsetattr (0, TCSANOW, &oldtty);
140 }
141
142 static void term_init(void)
143 {
144     struct termios tty;
145
146     tcgetattr (0, &tty);
147     oldtty = tty;
148
149     tty.c_iflag &= ~(IGNBRK|BRKINT|PARMRK|ISTRIP
150                           |INLCR|IGNCR|ICRNL|IXON);
151     tty.c_oflag |= OPOST;
152     tty.c_lflag &= ~(ECHO|ECHONL|ICANON|IEXTEN);
153     tty.c_cflag &= ~(CSIZE|PARENB);
154     tty.c_cflag |= CS8;
155     tty.c_cc[VMIN] = 1;
156     tty.c_cc[VTIME] = 0;
157
158     tcsetattr (0, TCSANOW, &tty);
159
160     atexit(term_exit);
161 }
162
163 static int read_password(char *buf, int buf_size)
164 {
165     uint8_t ch;
166     int i, ret;
167
168     printf("password: ");
169     fflush(stdout);
170     term_init();
171     i = 0;
172     for(;;) {
173         ret = read(0, &ch, 1);
174         if (ret == -1) {
175             if (errno == EAGAIN || errno == EINTR) {
176                 continue;
177             } else {
178                 ret = -1;
179                 break;
180             }
181         } else if (ret == 0) {
182             ret = -1;
183             break;
184         } else {
185             if (ch == '\r') {
186                 ret = 0;
187                 break;
188             }
189             if (i < (buf_size - 1))
190                 buf[i++] = ch;
191         }
192     }
193     term_exit();
194     buf[i] = '\0';
195     printf("\n");
196     return ret;
197 }
198 #endif
199
200 static int print_block_option_help(const char *filename, const char *fmt)
201 {
202     BlockDriver *drv, *proto_drv;
203     QEMUOptionParameter *create_options = NULL;
204
205     /* Find driver and parse its options */
206     drv = bdrv_find_format(fmt);
207     if (!drv) {
208         error_report("Unknown file format '%s'", fmt);
209         return 1;
210     }
211
212     proto_drv = bdrv_find_protocol(filename);
213     if (!proto_drv) {
214         error_report("Unknown protocol '%s'", filename);
215         return 1;
216     }
217
218     create_options = append_option_parameters(create_options,
219                                               drv->create_options);
220     create_options = append_option_parameters(create_options,
221                                               proto_drv->create_options);
222     print_option_help(create_options);
223     free_option_parameters(create_options);
224     return 0;
225 }
226
227 static BlockDriverState *bdrv_new_open(const char *filename,
228                                        const char *fmt,
229                                        int flags,
230                                        bool require_io)
231 {
232     BlockDriverState *bs;
233     BlockDriver *drv;
234     char password[256];
235     int ret;
236
237     bs = bdrv_new("image");
238
239     if (fmt) {
240         drv = bdrv_find_format(fmt);
241         if (!drv) {
242             error_report("Unknown file format '%s'", fmt);
243             goto fail;
244         }
245     } else {
246         drv = NULL;
247     }
248
249     ret = bdrv_open(bs, filename, flags, drv);
250     if (ret < 0) {
251         error_report("Could not open '%s': %s", filename, strerror(-ret));
252         goto fail;
253     }
254
255     if (bdrv_is_encrypted(bs) && require_io) {
256         printf("Disk image '%s' is encrypted.\n", filename);
257         if (read_password(password, sizeof(password)) < 0) {
258             error_report("No password given");
259             goto fail;
260         }
261         if (bdrv_set_key(bs, password) < 0) {
262             error_report("invalid password");
263             goto fail;
264         }
265     }
266     return bs;
267 fail:
268     if (bs) {
269         bdrv_delete(bs);
270     }
271     return NULL;
272 }
273
274 static int add_old_style_options(const char *fmt, QEMUOptionParameter *list,
275                                  const char *base_filename,
276                                  const char *base_fmt)
277 {
278     if (base_filename) {
279         if (set_option_parameter(list, BLOCK_OPT_BACKING_FILE, base_filename)) {
280             error_report("Backing file not supported for file format '%s'",
281                          fmt);
282             return -1;
283         }
284     }
285     if (base_fmt) {
286         if (set_option_parameter(list, BLOCK_OPT_BACKING_FMT, base_fmt)) {
287             error_report("Backing file format not supported for file "
288                          "format '%s'", fmt);
289             return -1;
290         }
291     }
292     return 0;
293 }
294
295 static int img_create(int argc, char **argv)
296 {
297     int c;
298     uint64_t img_size = -1;
299     const char *fmt = "raw";
300     const char *base_fmt = NULL;
301     const char *filename;
302     const char *base_filename = NULL;
303     char *options = NULL;
304     Error *local_err = NULL;
305
306     for(;;) {
307         c = getopt(argc, argv, "F:b:f:he6o:");
308         if (c == -1) {
309             break;
310         }
311         switch(c) {
312         case '?':
313         case 'h':
314             help();
315             break;
316         case 'F':
317             base_fmt = optarg;
318             break;
319         case 'b':
320             base_filename = optarg;
321             break;
322         case 'f':
323             fmt = optarg;
324             break;
325         case 'e':
326             error_report("option -e is deprecated, please use \'-o "
327                   "encryption\' instead!");
328             return 1;
329         case '6':
330             error_report("option -6 is deprecated, please use \'-o "
331                   "compat6\' instead!");
332             return 1;
333         case 'o':
334             options = optarg;
335             break;
336         }
337     }
338
339     /* Get the filename */
340     if (optind >= argc) {
341         help();
342     }
343     filename = argv[optind++];
344
345     /* Get image size, if specified */
346     if (optind < argc) {
347         int64_t sval;
348         char *end;
349         sval = strtosz_suffix(argv[optind++], &end, STRTOSZ_DEFSUFFIX_B);
350         if (sval < 0 || *end) {
351             if (sval == -ERANGE) {
352                 error_report("Image size must be less than 8 EiB!");
353             } else {
354                 error_report("Invalid image size specified! You may use k, M, "
355                       "G or T suffixes for ");
356                 error_report("kilobytes, megabytes, gigabytes and terabytes.");
357             }
358             return 1;
359         }
360         img_size = (uint64_t)sval;
361     }
362
363     if (options && is_help_option(options)) {
364         return print_block_option_help(filename, fmt);
365     }
366
367     bdrv_img_create(filename, fmt, base_filename, base_fmt,
368                     options, img_size, BDRV_O_FLAGS, &local_err);
369     if (error_is_set(&local_err)) {
370         error_report("%s", error_get_pretty(local_err));
371         error_free(local_err);
372         return 1;
373     }
374
375     return 0;
376 }
377
378 /*
379  * Checks an image for consistency. Exit codes:
380  *
381  * 0 - Check completed, image is good
382  * 1 - Check not completed because of internal errors
383  * 2 - Check completed, image is corrupted
384  * 3 - Check completed, image has leaked clusters, but is good otherwise
385  */
386 static int img_check(int argc, char **argv)
387 {
388     int c, ret;
389     const char *filename, *fmt;
390     BlockDriverState *bs;
391     BdrvCheckResult result;
392     int fix = 0;
393     int flags = BDRV_O_FLAGS | BDRV_O_CHECK;
394
395     fmt = NULL;
396     for(;;) {
397         c = getopt(argc, argv, "f:hr:");
398         if (c == -1) {
399             break;
400         }
401         switch(c) {
402         case '?':
403         case 'h':
404             help();
405             break;
406         case 'f':
407             fmt = optarg;
408             break;
409         case 'r':
410             flags |= BDRV_O_RDWR;
411
412             if (!strcmp(optarg, "leaks")) {
413                 fix = BDRV_FIX_LEAKS;
414             } else if (!strcmp(optarg, "all")) {
415                 fix = BDRV_FIX_LEAKS | BDRV_FIX_ERRORS;
416             } else {
417                 help();
418             }
419             break;
420         }
421     }
422     if (optind >= argc) {
423         help();
424     }
425     filename = argv[optind++];
426
427     bs = bdrv_new_open(filename, fmt, flags, true);
428     if (!bs) {
429         return 1;
430     }
431     ret = bdrv_check(bs, &result, fix);
432
433     if (ret == -ENOTSUP) {
434         error_report("This image format does not support checks");
435         bdrv_delete(bs);
436         return 1;
437     }
438
439     if (result.corruptions_fixed || result.leaks_fixed) {
440         printf("The following inconsistencies were found and repaired:\n\n"
441                "    %d leaked clusters\n"
442                "    %d corruptions\n\n"
443                "Double checking the fixed image now...\n",
444                result.leaks_fixed,
445                result.corruptions_fixed);
446         ret = bdrv_check(bs, &result, 0);
447     }
448
449     if (!(result.corruptions || result.leaks || result.check_errors)) {
450         printf("No errors were found on the image.\n");
451     } else {
452         if (result.corruptions) {
453             printf("\n%d errors were found on the image.\n"
454                 "Data may be corrupted, or further writes to the image "
455                 "may corrupt it.\n",
456                 result.corruptions);
457         }
458
459         if (result.leaks) {
460             printf("\n%d leaked clusters were found on the image.\n"
461                 "This means waste of disk space, but no harm to data.\n",
462                 result.leaks);
463         }
464
465         if (result.check_errors) {
466             printf("\n%d internal errors have occurred during the check.\n",
467                 result.check_errors);
468         }
469     }
470
471     if (result.bfi.total_clusters != 0 && result.bfi.allocated_clusters != 0) {
472         printf("%" PRId64 "/%" PRId64 "= %0.2f%% allocated, %0.2f%% fragmented\n",
473         result.bfi.allocated_clusters, result.bfi.total_clusters,
474         result.bfi.allocated_clusters * 100.0 / result.bfi.total_clusters,
475         result.bfi.fragmented_clusters * 100.0 / result.bfi.allocated_clusters);
476     }
477
478     bdrv_delete(bs);
479
480     if (ret < 0 || result.check_errors) {
481         printf("\nAn error has occurred during the check: %s\n"
482             "The check is not complete and may have missed error.\n",
483             strerror(-ret));
484         return 1;
485     }
486
487     if (result.corruptions) {
488         return 2;
489     } else if (result.leaks) {
490         return 3;
491     } else {
492         return 0;
493     }
494 }
495
496 static int img_commit(int argc, char **argv)
497 {
498     int c, ret, flags;
499     const char *filename, *fmt, *cache;
500     BlockDriverState *bs;
501
502     fmt = NULL;
503     cache = BDRV_DEFAULT_CACHE;
504     for(;;) {
505         c = getopt(argc, argv, "f:ht:");
506         if (c == -1) {
507             break;
508         }
509         switch(c) {
510         case '?':
511         case 'h':
512             help();
513             break;
514         case 'f':
515             fmt = optarg;
516             break;
517         case 't':
518             cache = optarg;
519             break;
520         }
521     }
522     if (optind >= argc) {
523         help();
524     }
525     filename = argv[optind++];
526
527     flags = BDRV_O_RDWR;
528     ret = bdrv_parse_cache_flags(cache, &flags);
529     if (ret < 0) {
530         error_report("Invalid cache option: %s", cache);
531         return -1;
532     }
533
534     bs = bdrv_new_open(filename, fmt, flags, true);
535     if (!bs) {
536         return 1;
537     }
538     ret = bdrv_commit(bs);
539     switch(ret) {
540     case 0:
541         printf("Image committed.\n");
542         break;
543     case -ENOENT:
544         error_report("No disk inserted");
545         break;
546     case -EACCES:
547         error_report("Image is read-only");
548         break;
549     case -ENOTSUP:
550         error_report("Image is already committed");
551         break;
552     default:
553         error_report("Error while committing image");
554         break;
555     }
556
557     bdrv_delete(bs);
558     if (ret) {
559         return 1;
560     }
561     return 0;
562 }
563
564 /*
565  * Returns true iff the first sector pointed to by 'buf' contains at least
566  * a non-NUL byte.
567  *
568  * 'pnum' is set to the number of sectors (including and immediately following
569  * the first one) that are known to be in the same allocated/unallocated state.
570  */
571 static int is_allocated_sectors(const uint8_t *buf, int n, int *pnum)
572 {
573     bool is_zero;
574     int i;
575
576     if (n <= 0) {
577         *pnum = 0;
578         return 0;
579     }
580     is_zero = buffer_is_zero(buf, 512);
581     for(i = 1; i < n; i++) {
582         buf += 512;
583         if (is_zero != buffer_is_zero(buf, 512)) {
584             break;
585         }
586     }
587     *pnum = i;
588     return !is_zero;
589 }
590
591 /*
592  * Like is_allocated_sectors, but if the buffer starts with a used sector,
593  * up to 'min' consecutive sectors containing zeros are ignored. This avoids
594  * breaking up write requests for only small sparse areas.
595  */
596 static int is_allocated_sectors_min(const uint8_t *buf, int n, int *pnum,
597     int min)
598 {
599     int ret;
600     int num_checked, num_used;
601
602     if (n < min) {
603         min = n;
604     }
605
606     ret = is_allocated_sectors(buf, n, pnum);
607     if (!ret) {
608         return ret;
609     }
610
611     num_used = *pnum;
612     buf += BDRV_SECTOR_SIZE * *pnum;
613     n -= *pnum;
614     num_checked = num_used;
615
616     while (n > 0) {
617         ret = is_allocated_sectors(buf, n, pnum);
618
619         buf += BDRV_SECTOR_SIZE * *pnum;
620         n -= *pnum;
621         num_checked += *pnum;
622         if (ret) {
623             num_used = num_checked;
624         } else if (*pnum >= min) {
625             break;
626         }
627     }
628
629     *pnum = num_used;
630     return 1;
631 }
632
633 /*
634  * Compares two buffers sector by sector. Returns 0 if the first sector of both
635  * buffers matches, non-zero otherwise.
636  *
637  * pnum is set to the number of sectors (including and immediately following
638  * the first one) that are known to have the same comparison result
639  */
640 static int compare_sectors(const uint8_t *buf1, const uint8_t *buf2, int n,
641     int *pnum)
642 {
643     int res, i;
644
645     if (n <= 0) {
646         *pnum = 0;
647         return 0;
648     }
649
650     res = !!memcmp(buf1, buf2, 512);
651     for(i = 1; i < n; i++) {
652         buf1 += 512;
653         buf2 += 512;
654
655         if (!!memcmp(buf1, buf2, 512) != res) {
656             break;
657         }
658     }
659
660     *pnum = i;
661     return res;
662 }
663
664 #define IO_BUF_SIZE (2 * 1024 * 1024)
665
666 static int img_convert(int argc, char **argv)
667 {
668     int c, ret = 0, n, n1, bs_n, bs_i, compress, cluster_size, cluster_sectors;
669     int progress = 0, flags;
670     const char *fmt, *out_fmt, *cache, *out_baseimg, *out_filename;
671     BlockDriver *drv, *proto_drv;
672     BlockDriverState **bs = NULL, *out_bs = NULL;
673     int64_t total_sectors, nb_sectors, sector_num, bs_offset;
674     uint64_t bs_sectors;
675     uint8_t * buf = NULL;
676     const uint8_t *buf1;
677     BlockDriverInfo bdi;
678     QEMUOptionParameter *param = NULL, *create_options = NULL;
679     QEMUOptionParameter *out_baseimg_param;
680     char *options = NULL;
681     const char *snapshot_name = NULL;
682     float local_progress = 0;
683     int min_sparse = 8; /* Need at least 4k of zeros for sparse detection */
684
685     fmt = NULL;
686     out_fmt = "raw";
687     cache = "unsafe";
688     out_baseimg = NULL;
689     compress = 0;
690     for(;;) {
691         c = getopt(argc, argv, "f:O:B:s:hce6o:pS:t:");
692         if (c == -1) {
693             break;
694         }
695         switch(c) {
696         case '?':
697         case 'h':
698             help();
699             break;
700         case 'f':
701             fmt = optarg;
702             break;
703         case 'O':
704             out_fmt = optarg;
705             break;
706         case 'B':
707             out_baseimg = optarg;
708             break;
709         case 'c':
710             compress = 1;
711             break;
712         case 'e':
713             error_report("option -e is deprecated, please use \'-o "
714                   "encryption\' instead!");
715             return 1;
716         case '6':
717             error_report("option -6 is deprecated, please use \'-o "
718                   "compat6\' instead!");
719             return 1;
720         case 'o':
721             options = optarg;
722             break;
723         case 's':
724             snapshot_name = optarg;
725             break;
726         case 'S':
727         {
728             int64_t sval;
729             char *end;
730             sval = strtosz_suffix(optarg, &end, STRTOSZ_DEFSUFFIX_B);
731             if (sval < 0 || *end) {
732                 error_report("Invalid minimum zero buffer size for sparse output specified");
733                 return 1;
734             }
735
736             min_sparse = sval / BDRV_SECTOR_SIZE;
737             break;
738         }
739         case 'p':
740             progress = 1;
741             break;
742         case 't':
743             cache = optarg;
744             break;
745         }
746     }
747
748     bs_n = argc - optind - 1;
749     if (bs_n < 1) {
750         help();
751     }
752
753     out_filename = argv[argc - 1];
754
755     /* Initialize before goto out */
756     qemu_progress_init(progress, 2.0);
757
758     if (options && is_help_option(options)) {
759         ret = print_block_option_help(out_filename, out_fmt);
760         goto out;
761     }
762
763     if (bs_n > 1 && out_baseimg) {
764         error_report("-B makes no sense when concatenating multiple input "
765                      "images");
766         ret = -1;
767         goto out;
768     }
769
770     qemu_progress_print(0, 100);
771
772     bs = g_malloc0(bs_n * sizeof(BlockDriverState *));
773
774     total_sectors = 0;
775     for (bs_i = 0; bs_i < bs_n; bs_i++) {
776         bs[bs_i] = bdrv_new_open(argv[optind + bs_i], fmt, BDRV_O_FLAGS, true);
777         if (!bs[bs_i]) {
778             error_report("Could not open '%s'", argv[optind + bs_i]);
779             ret = -1;
780             goto out;
781         }
782         bdrv_get_geometry(bs[bs_i], &bs_sectors);
783         total_sectors += bs_sectors;
784     }
785
786     if (snapshot_name != NULL) {
787         if (bs_n > 1) {
788             error_report("No support for concatenating multiple snapshot");
789             ret = -1;
790             goto out;
791         }
792         if (bdrv_snapshot_load_tmp(bs[0], snapshot_name) < 0) {
793             error_report("Failed to load snapshot");
794             ret = -1;
795             goto out;
796         }
797     }
798
799     /* Find driver and parse its options */
800     drv = bdrv_find_format(out_fmt);
801     if (!drv) {
802         error_report("Unknown file format '%s'", out_fmt);
803         ret = -1;
804         goto out;
805     }
806
807     proto_drv = bdrv_find_protocol(out_filename);
808     if (!proto_drv) {
809         error_report("Unknown protocol '%s'", out_filename);
810         ret = -1;
811         goto out;
812     }
813
814     create_options = append_option_parameters(create_options,
815                                               drv->create_options);
816     create_options = append_option_parameters(create_options,
817                                               proto_drv->create_options);
818
819     if (options) {
820         param = parse_option_parameters(options, create_options, param);
821         if (param == NULL) {
822             error_report("Invalid options for file format '%s'.", out_fmt);
823             ret = -1;
824             goto out;
825         }
826     } else {
827         param = parse_option_parameters("", create_options, param);
828     }
829
830     set_option_parameter_int(param, BLOCK_OPT_SIZE, total_sectors * 512);
831     ret = add_old_style_options(out_fmt, param, out_baseimg, NULL);
832     if (ret < 0) {
833         goto out;
834     }
835
836     /* Get backing file name if -o backing_file was used */
837     out_baseimg_param = get_option_parameter(param, BLOCK_OPT_BACKING_FILE);
838     if (out_baseimg_param) {
839         out_baseimg = out_baseimg_param->value.s;
840     }
841
842     /* Check if compression is supported */
843     if (compress) {
844         QEMUOptionParameter *encryption =
845             get_option_parameter(param, BLOCK_OPT_ENCRYPT);
846         QEMUOptionParameter *preallocation =
847             get_option_parameter(param, BLOCK_OPT_PREALLOC);
848
849         if (!drv->bdrv_write_compressed) {
850             error_report("Compression not supported for this file format");
851             ret = -1;
852             goto out;
853         }
854
855         if (encryption && encryption->value.n) {
856             error_report("Compression and encryption not supported at "
857                          "the same time");
858             ret = -1;
859             goto out;
860         }
861
862         if (preallocation && preallocation->value.s
863             && strcmp(preallocation->value.s, "off"))
864         {
865             error_report("Compression and preallocation not supported at "
866                          "the same time");
867             ret = -1;
868             goto out;
869         }
870     }
871
872     /* Create the new image */
873     ret = bdrv_create(drv, out_filename, param);
874     if (ret < 0) {
875         if (ret == -ENOTSUP) {
876             error_report("Formatting not supported for file format '%s'",
877                          out_fmt);
878         } else if (ret == -EFBIG) {
879             error_report("The image size is too large for file format '%s'",
880                          out_fmt);
881         } else {
882             error_report("%s: error while converting %s: %s",
883                          out_filename, out_fmt, strerror(-ret));
884         }
885         goto out;
886     }
887
888     flags = BDRV_O_RDWR;
889     ret = bdrv_parse_cache_flags(cache, &flags);
890     if (ret < 0) {
891         error_report("Invalid cache option: %s", cache);
892         return -1;
893     }
894
895     out_bs = bdrv_new_open(out_filename, out_fmt, flags, true);
896     if (!out_bs) {
897         ret = -1;
898         goto out;
899     }
900
901     bs_i = 0;
902     bs_offset = 0;
903     bdrv_get_geometry(bs[0], &bs_sectors);
904     buf = qemu_blockalign(out_bs, IO_BUF_SIZE);
905
906     if (compress) {
907         ret = bdrv_get_info(out_bs, &bdi);
908         if (ret < 0) {
909             error_report("could not get block driver info");
910             goto out;
911         }
912         cluster_size = bdi.cluster_size;
913         if (cluster_size <= 0 || cluster_size > IO_BUF_SIZE) {
914             error_report("invalid cluster size");
915             ret = -1;
916             goto out;
917         }
918         cluster_sectors = cluster_size >> 9;
919         sector_num = 0;
920
921         nb_sectors = total_sectors;
922         if (nb_sectors != 0) {
923             local_progress = (float)100 /
924                 (nb_sectors / MIN(nb_sectors, cluster_sectors));
925         }
926
927         for(;;) {
928             int64_t bs_num;
929             int remainder;
930             uint8_t *buf2;
931
932             nb_sectors = total_sectors - sector_num;
933             if (nb_sectors <= 0)
934                 break;
935             if (nb_sectors >= cluster_sectors)
936                 n = cluster_sectors;
937             else
938                 n = nb_sectors;
939
940             bs_num = sector_num - bs_offset;
941             assert (bs_num >= 0);
942             remainder = n;
943             buf2 = buf;
944             while (remainder > 0) {
945                 int nlow;
946                 while (bs_num == bs_sectors) {
947                     bs_i++;
948                     assert (bs_i < bs_n);
949                     bs_offset += bs_sectors;
950                     bdrv_get_geometry(bs[bs_i], &bs_sectors);
951                     bs_num = 0;
952                     /* printf("changing part: sector_num=%" PRId64 ", "
953                        "bs_i=%d, bs_offset=%" PRId64 ", bs_sectors=%" PRId64
954                        "\n", sector_num, bs_i, bs_offset, bs_sectors); */
955                 }
956                 assert (bs_num < bs_sectors);
957
958                 nlow = (remainder > bs_sectors - bs_num) ? bs_sectors - bs_num : remainder;
959
960                 ret = bdrv_read(bs[bs_i], bs_num, buf2, nlow);
961                 if (ret < 0) {
962                     error_report("error while reading sector %" PRId64 ": %s",
963                                  bs_num, strerror(-ret));
964                     goto out;
965                 }
966
967                 buf2 += nlow * 512;
968                 bs_num += nlow;
969
970                 remainder -= nlow;
971             }
972             assert (remainder == 0);
973
974             if (n < cluster_sectors) {
975                 memset(buf + n * 512, 0, cluster_size - n * 512);
976             }
977             if (!buffer_is_zero(buf, cluster_size)) {
978                 ret = bdrv_write_compressed(out_bs, sector_num, buf,
979                                             cluster_sectors);
980                 if (ret != 0) {
981                     error_report("error while compressing sector %" PRId64
982                                  ": %s", sector_num, strerror(-ret));
983                     goto out;
984                 }
985             }
986             sector_num += n;
987             qemu_progress_print(local_progress, 100);
988         }
989         /* signal EOF to align */
990         bdrv_write_compressed(out_bs, 0, NULL, 0);
991     } else {
992         int has_zero_init = bdrv_has_zero_init(out_bs);
993
994         sector_num = 0; // total number of sectors converted so far
995         nb_sectors = total_sectors - sector_num;
996         if (nb_sectors != 0) {
997             local_progress = (float)100 /
998                 (nb_sectors / MIN(nb_sectors, IO_BUF_SIZE / 512));
999         }
1000
1001         for(;;) {
1002             nb_sectors = total_sectors - sector_num;
1003             if (nb_sectors <= 0) {
1004                 break;
1005             }
1006             if (nb_sectors >= (IO_BUF_SIZE / 512)) {
1007                 n = (IO_BUF_SIZE / 512);
1008             } else {
1009                 n = nb_sectors;
1010             }
1011
1012             while (sector_num - bs_offset >= bs_sectors) {
1013                 bs_i ++;
1014                 assert (bs_i < bs_n);
1015                 bs_offset += bs_sectors;
1016                 bdrv_get_geometry(bs[bs_i], &bs_sectors);
1017                 /* printf("changing part: sector_num=%" PRId64 ", bs_i=%d, "
1018                   "bs_offset=%" PRId64 ", bs_sectors=%" PRId64 "\n",
1019                    sector_num, bs_i, bs_offset, bs_sectors); */
1020             }
1021
1022             if (n > bs_offset + bs_sectors - sector_num) {
1023                 n = bs_offset + bs_sectors - sector_num;
1024             }
1025
1026             if (has_zero_init) {
1027                 /* If the output image is being created as a copy on write image,
1028                    assume that sectors which are unallocated in the input image
1029                    are present in both the output's and input's base images (no
1030                    need to copy them). */
1031                 if (out_baseimg) {
1032                     if (!bdrv_is_allocated(bs[bs_i], sector_num - bs_offset,
1033                                            n, &n1)) {
1034                         sector_num += n1;
1035                         continue;
1036                     }
1037                     /* The next 'n1' sectors are allocated in the input image. Copy
1038                        only those as they may be followed by unallocated sectors. */
1039                     n = n1;
1040                 }
1041             } else {
1042                 n1 = n;
1043             }
1044
1045             ret = bdrv_read(bs[bs_i], sector_num - bs_offset, buf, n);
1046             if (ret < 0) {
1047                 error_report("error while reading sector %" PRId64 ": %s",
1048                              sector_num - bs_offset, strerror(-ret));
1049                 goto out;
1050             }
1051             /* NOTE: at the same time we convert, we do not write zero
1052                sectors to have a chance to compress the image. Ideally, we
1053                should add a specific call to have the info to go faster */
1054             buf1 = buf;
1055             while (n > 0) {
1056                 /* If the output image is being created as a copy on write image,
1057                    copy all sectors even the ones containing only NUL bytes,
1058                    because they may differ from the sectors in the base image.
1059
1060                    If the output is to a host device, we also write out
1061                    sectors that are entirely 0, since whatever data was
1062                    already there is garbage, not 0s. */
1063                 if (!has_zero_init || out_baseimg ||
1064                     is_allocated_sectors_min(buf1, n, &n1, min_sparse)) {
1065                     ret = bdrv_write(out_bs, sector_num, buf1, n1);
1066                     if (ret < 0) {
1067                         error_report("error while writing sector %" PRId64
1068                                      ": %s", sector_num, strerror(-ret));
1069                         goto out;
1070                     }
1071                 }
1072                 sector_num += n1;
1073                 n -= n1;
1074                 buf1 += n1 * 512;
1075             }
1076             qemu_progress_print(local_progress, 100);
1077         }
1078     }
1079 out:
1080     qemu_progress_end();
1081     free_option_parameters(create_options);
1082     free_option_parameters(param);
1083     qemu_vfree(buf);
1084     if (out_bs) {
1085         bdrv_delete(out_bs);
1086     }
1087     if (bs) {
1088         for (bs_i = 0; bs_i < bs_n; bs_i++) {
1089             if (bs[bs_i]) {
1090                 bdrv_delete(bs[bs_i]);
1091             }
1092         }
1093         g_free(bs);
1094     }
1095     if (ret) {
1096         return 1;
1097     }
1098     return 0;
1099 }
1100
1101
1102 static void dump_snapshots(BlockDriverState *bs)
1103 {
1104     QEMUSnapshotInfo *sn_tab, *sn;
1105     int nb_sns, i;
1106     char buf[256];
1107
1108     nb_sns = bdrv_snapshot_list(bs, &sn_tab);
1109     if (nb_sns <= 0)
1110         return;
1111     printf("Snapshot list:\n");
1112     printf("%s\n", bdrv_snapshot_dump(buf, sizeof(buf), NULL));
1113     for(i = 0; i < nb_sns; i++) {
1114         sn = &sn_tab[i];
1115         printf("%s\n", bdrv_snapshot_dump(buf, sizeof(buf), sn));
1116     }
1117     g_free(sn_tab);
1118 }
1119
1120 static void dump_json_image_info_list(ImageInfoList *list)
1121 {
1122     Error *errp = NULL;
1123     QString *str;
1124     QmpOutputVisitor *ov = qmp_output_visitor_new();
1125     QObject *obj;
1126     visit_type_ImageInfoList(qmp_output_get_visitor(ov),
1127                              &list, NULL, &errp);
1128     obj = qmp_output_get_qobject(ov);
1129     str = qobject_to_json_pretty(obj);
1130     assert(str != NULL);
1131     printf("%s\n", qstring_get_str(str));
1132     qobject_decref(obj);
1133     qmp_output_visitor_cleanup(ov);
1134     QDECREF(str);
1135 }
1136
1137 static void collect_snapshots(BlockDriverState *bs , ImageInfo *info)
1138 {
1139     int i, sn_count;
1140     QEMUSnapshotInfo *sn_tab = NULL;
1141     SnapshotInfoList *info_list, *cur_item = NULL;
1142     sn_count = bdrv_snapshot_list(bs, &sn_tab);
1143
1144     for (i = 0; i < sn_count; i++) {
1145         info->has_snapshots = true;
1146         info_list = g_new0(SnapshotInfoList, 1);
1147
1148         info_list->value                = g_new0(SnapshotInfo, 1);
1149         info_list->value->id            = g_strdup(sn_tab[i].id_str);
1150         info_list->value->name          = g_strdup(sn_tab[i].name);
1151         info_list->value->vm_state_size = sn_tab[i].vm_state_size;
1152         info_list->value->date_sec      = sn_tab[i].date_sec;
1153         info_list->value->date_nsec     = sn_tab[i].date_nsec;
1154         info_list->value->vm_clock_sec  = sn_tab[i].vm_clock_nsec / 1000000000;
1155         info_list->value->vm_clock_nsec = sn_tab[i].vm_clock_nsec % 1000000000;
1156
1157         /* XXX: waiting for the qapi to support qemu-queue.h types */
1158         if (!cur_item) {
1159             info->snapshots = cur_item = info_list;
1160         } else {
1161             cur_item->next = info_list;
1162             cur_item = info_list;
1163         }
1164
1165     }
1166
1167     g_free(sn_tab);
1168 }
1169
1170 static void dump_json_image_info(ImageInfo *info)
1171 {
1172     Error *errp = NULL;
1173     QString *str;
1174     QmpOutputVisitor *ov = qmp_output_visitor_new();
1175     QObject *obj;
1176     visit_type_ImageInfo(qmp_output_get_visitor(ov),
1177                          &info, NULL, &errp);
1178     obj = qmp_output_get_qobject(ov);
1179     str = qobject_to_json_pretty(obj);
1180     assert(str != NULL);
1181     printf("%s\n", qstring_get_str(str));
1182     qobject_decref(obj);
1183     qmp_output_visitor_cleanup(ov);
1184     QDECREF(str);
1185 }
1186
1187 static void collect_image_info(BlockDriverState *bs,
1188                    ImageInfo *info,
1189                    const char *filename,
1190                    const char *fmt)
1191 {
1192     uint64_t total_sectors;
1193     char backing_filename[1024];
1194     char backing_filename2[1024];
1195     BlockDriverInfo bdi;
1196
1197     bdrv_get_geometry(bs, &total_sectors);
1198
1199     info->filename        = g_strdup(filename);
1200     info->format          = g_strdup(bdrv_get_format_name(bs));
1201     info->virtual_size    = total_sectors * 512;
1202     info->actual_size     = bdrv_get_allocated_file_size(bs);
1203     info->has_actual_size = info->actual_size >= 0;
1204     if (bdrv_is_encrypted(bs)) {
1205         info->encrypted = true;
1206         info->has_encrypted = true;
1207     }
1208     if (bdrv_get_info(bs, &bdi) >= 0) {
1209         if (bdi.cluster_size != 0) {
1210             info->cluster_size = bdi.cluster_size;
1211             info->has_cluster_size = true;
1212         }
1213         info->dirty_flag = bdi.is_dirty;
1214         info->has_dirty_flag = true;
1215     }
1216     bdrv_get_backing_filename(bs, backing_filename, sizeof(backing_filename));
1217     if (backing_filename[0] != '\0') {
1218         info->backing_filename = g_strdup(backing_filename);
1219         info->has_backing_filename = true;
1220         bdrv_get_full_backing_filename(bs, backing_filename2,
1221                                        sizeof(backing_filename2));
1222
1223         if (strcmp(backing_filename, backing_filename2) != 0) {
1224             info->full_backing_filename =
1225                         g_strdup(backing_filename2);
1226             info->has_full_backing_filename = true;
1227         }
1228
1229         if (bs->backing_format[0]) {
1230             info->backing_filename_format = g_strdup(bs->backing_format);
1231             info->has_backing_filename_format = true;
1232         }
1233     }
1234 }
1235
1236 static void dump_human_image_info(ImageInfo *info)
1237 {
1238     char size_buf[128], dsize_buf[128];
1239     if (!info->has_actual_size) {
1240         snprintf(dsize_buf, sizeof(dsize_buf), "unavailable");
1241     } else {
1242         get_human_readable_size(dsize_buf, sizeof(dsize_buf),
1243                                 info->actual_size);
1244     }
1245     get_human_readable_size(size_buf, sizeof(size_buf), info->virtual_size);
1246     printf("image: %s\n"
1247            "file format: %s\n"
1248            "virtual size: %s (%" PRId64 " bytes)\n"
1249            "disk size: %s\n",
1250            info->filename, info->format, size_buf,
1251            info->virtual_size,
1252            dsize_buf);
1253
1254     if (info->has_encrypted && info->encrypted) {
1255         printf("encrypted: yes\n");
1256     }
1257
1258     if (info->has_cluster_size) {
1259         printf("cluster_size: %" PRId64 "\n", info->cluster_size);
1260     }
1261
1262     if (info->has_dirty_flag && info->dirty_flag) {
1263         printf("cleanly shut down: no\n");
1264     }
1265
1266     if (info->has_backing_filename) {
1267         printf("backing file: %s", info->backing_filename);
1268         if (info->has_full_backing_filename) {
1269             printf(" (actual path: %s)", info->full_backing_filename);
1270         }
1271         putchar('\n');
1272         if (info->has_backing_filename_format) {
1273             printf("backing file format: %s\n", info->backing_filename_format);
1274         }
1275     }
1276
1277     if (info->has_snapshots) {
1278         SnapshotInfoList *elem;
1279         char buf[256];
1280
1281         printf("Snapshot list:\n");
1282         printf("%s\n", bdrv_snapshot_dump(buf, sizeof(buf), NULL));
1283
1284         /* Ideally bdrv_snapshot_dump() would operate on SnapshotInfoList but
1285          * we convert to the block layer's native QEMUSnapshotInfo for now.
1286          */
1287         for (elem = info->snapshots; elem; elem = elem->next) {
1288             QEMUSnapshotInfo sn = {
1289                 .vm_state_size = elem->value->vm_state_size,
1290                 .date_sec = elem->value->date_sec,
1291                 .date_nsec = elem->value->date_nsec,
1292                 .vm_clock_nsec = elem->value->vm_clock_sec * 1000000000ULL +
1293                                  elem->value->vm_clock_nsec,
1294             };
1295
1296             pstrcpy(sn.id_str, sizeof(sn.id_str), elem->value->id);
1297             pstrcpy(sn.name, sizeof(sn.name), elem->value->name);
1298             printf("%s\n", bdrv_snapshot_dump(buf, sizeof(buf), &sn));
1299         }
1300     }
1301 }
1302
1303 static void dump_human_image_info_list(ImageInfoList *list)
1304 {
1305     ImageInfoList *elem;
1306     bool delim = false;
1307
1308     for (elem = list; elem; elem = elem->next) {
1309         if (delim) {
1310             printf("\n");
1311         }
1312         delim = true;
1313
1314         dump_human_image_info(elem->value);
1315     }
1316 }
1317
1318 static gboolean str_equal_func(gconstpointer a, gconstpointer b)
1319 {
1320     return strcmp(a, b) == 0;
1321 }
1322
1323 /**
1324  * Open an image file chain and return an ImageInfoList
1325  *
1326  * @filename: topmost image filename
1327  * @fmt: topmost image format (may be NULL to autodetect)
1328  * @chain: true  - enumerate entire backing file chain
1329  *         false - only topmost image file
1330  *
1331  * Returns a list of ImageInfo objects or NULL if there was an error opening an
1332  * image file.  If there was an error a message will have been printed to
1333  * stderr.
1334  */
1335 static ImageInfoList *collect_image_info_list(const char *filename,
1336                                               const char *fmt,
1337                                               bool chain)
1338 {
1339     ImageInfoList *head = NULL;
1340     ImageInfoList **last = &head;
1341     GHashTable *filenames;
1342
1343     filenames = g_hash_table_new_full(g_str_hash, str_equal_func, NULL, NULL);
1344
1345     while (filename) {
1346         BlockDriverState *bs;
1347         ImageInfo *info;
1348         ImageInfoList *elem;
1349
1350         if (g_hash_table_lookup_extended(filenames, filename, NULL, NULL)) {
1351             error_report("Backing file '%s' creates an infinite loop.",
1352                          filename);
1353             goto err;
1354         }
1355         g_hash_table_insert(filenames, (gpointer)filename, NULL);
1356
1357         bs = bdrv_new_open(filename, fmt, BDRV_O_FLAGS | BDRV_O_NO_BACKING,
1358                            false);
1359         if (!bs) {
1360             goto err;
1361         }
1362
1363         info = g_new0(ImageInfo, 1);
1364         collect_image_info(bs, info, filename, fmt);
1365         collect_snapshots(bs, info);
1366
1367         elem = g_new0(ImageInfoList, 1);
1368         elem->value = info;
1369         *last = elem;
1370         last = &elem->next;
1371
1372         bdrv_delete(bs);
1373
1374         filename = fmt = NULL;
1375         if (chain) {
1376             if (info->has_full_backing_filename) {
1377                 filename = info->full_backing_filename;
1378             } else if (info->has_backing_filename) {
1379                 filename = info->backing_filename;
1380             }
1381             if (info->has_backing_filename_format) {
1382                 fmt = info->backing_filename_format;
1383             }
1384         }
1385     }
1386     g_hash_table_destroy(filenames);
1387     return head;
1388
1389 err:
1390     qapi_free_ImageInfoList(head);
1391     g_hash_table_destroy(filenames);
1392     return NULL;
1393 }
1394
1395 enum {
1396     OPTION_OUTPUT = 256,
1397     OPTION_BACKING_CHAIN = 257,
1398 };
1399
1400 typedef enum OutputFormat {
1401     OFORMAT_JSON,
1402     OFORMAT_HUMAN,
1403 } OutputFormat;
1404
1405 static int img_info(int argc, char **argv)
1406 {
1407     int c;
1408     OutputFormat output_format = OFORMAT_HUMAN;
1409     bool chain = false;
1410     const char *filename, *fmt, *output;
1411     ImageInfoList *list;
1412
1413     fmt = NULL;
1414     output = NULL;
1415     for(;;) {
1416         int option_index = 0;
1417         static const struct option long_options[] = {
1418             {"help", no_argument, 0, 'h'},
1419             {"format", required_argument, 0, 'f'},
1420             {"output", required_argument, 0, OPTION_OUTPUT},
1421             {"backing-chain", no_argument, 0, OPTION_BACKING_CHAIN},
1422             {0, 0, 0, 0}
1423         };
1424         c = getopt_long(argc, argv, "f:h",
1425                         long_options, &option_index);
1426         if (c == -1) {
1427             break;
1428         }
1429         switch(c) {
1430         case '?':
1431         case 'h':
1432             help();
1433             break;
1434         case 'f':
1435             fmt = optarg;
1436             break;
1437         case OPTION_OUTPUT:
1438             output = optarg;
1439             break;
1440         case OPTION_BACKING_CHAIN:
1441             chain = true;
1442             break;
1443         }
1444     }
1445     if (optind >= argc) {
1446         help();
1447     }
1448     filename = argv[optind++];
1449
1450     if (output && !strcmp(output, "json")) {
1451         output_format = OFORMAT_JSON;
1452     } else if (output && !strcmp(output, "human")) {
1453         output_format = OFORMAT_HUMAN;
1454     } else if (output) {
1455         error_report("--output must be used with human or json as argument.");
1456         return 1;
1457     }
1458
1459     list = collect_image_info_list(filename, fmt, chain);
1460     if (!list) {
1461         return 1;
1462     }
1463
1464     switch (output_format) {
1465     case OFORMAT_HUMAN:
1466         dump_human_image_info_list(list);
1467         break;
1468     case OFORMAT_JSON:
1469         if (chain) {
1470             dump_json_image_info_list(list);
1471         } else {
1472             dump_json_image_info(list->value);
1473         }
1474         break;
1475     }
1476
1477     qapi_free_ImageInfoList(list);
1478     return 0;
1479 }
1480
1481 #define SNAPSHOT_LIST   1
1482 #define SNAPSHOT_CREATE 2
1483 #define SNAPSHOT_APPLY  3
1484 #define SNAPSHOT_DELETE 4
1485
1486 static int img_snapshot(int argc, char **argv)
1487 {
1488     BlockDriverState *bs;
1489     QEMUSnapshotInfo sn;
1490     char *filename, *snapshot_name = NULL;
1491     int c, ret = 0, bdrv_oflags;
1492     int action = 0;
1493     qemu_timeval tv;
1494
1495     bdrv_oflags = BDRV_O_FLAGS | BDRV_O_RDWR;
1496     /* Parse commandline parameters */
1497     for(;;) {
1498         c = getopt(argc, argv, "la:c:d:h");
1499         if (c == -1) {
1500             break;
1501         }
1502         switch(c) {
1503         case '?':
1504         case 'h':
1505             help();
1506             return 0;
1507         case 'l':
1508             if (action) {
1509                 help();
1510                 return 0;
1511             }
1512             action = SNAPSHOT_LIST;
1513             bdrv_oflags &= ~BDRV_O_RDWR; /* no need for RW */
1514             break;
1515         case 'a':
1516             if (action) {
1517                 help();
1518                 return 0;
1519             }
1520             action = SNAPSHOT_APPLY;
1521             snapshot_name = optarg;
1522             break;
1523         case 'c':
1524             if (action) {
1525                 help();
1526                 return 0;
1527             }
1528             action = SNAPSHOT_CREATE;
1529             snapshot_name = optarg;
1530             break;
1531         case 'd':
1532             if (action) {
1533                 help();
1534                 return 0;
1535             }
1536             action = SNAPSHOT_DELETE;
1537             snapshot_name = optarg;
1538             break;
1539         }
1540     }
1541
1542     if (optind >= argc) {
1543         help();
1544     }
1545     filename = argv[optind++];
1546
1547     /* Open the image */
1548     bs = bdrv_new_open(filename, NULL, bdrv_oflags, true);
1549     if (!bs) {
1550         return 1;
1551     }
1552
1553     /* Perform the requested action */
1554     switch(action) {
1555     case SNAPSHOT_LIST:
1556         dump_snapshots(bs);
1557         break;
1558
1559     case SNAPSHOT_CREATE:
1560         memset(&sn, 0, sizeof(sn));
1561         pstrcpy(sn.name, sizeof(sn.name), snapshot_name);
1562
1563         qemu_gettimeofday(&tv);
1564         sn.date_sec = tv.tv_sec;
1565         sn.date_nsec = tv.tv_usec * 1000;
1566
1567         ret = bdrv_snapshot_create(bs, &sn);
1568         if (ret) {
1569             error_report("Could not create snapshot '%s': %d (%s)",
1570                 snapshot_name, ret, strerror(-ret));
1571         }
1572         break;
1573
1574     case SNAPSHOT_APPLY:
1575         ret = bdrv_snapshot_goto(bs, snapshot_name);
1576         if (ret) {
1577             error_report("Could not apply snapshot '%s': %d (%s)",
1578                 snapshot_name, ret, strerror(-ret));
1579         }
1580         break;
1581
1582     case SNAPSHOT_DELETE:
1583         ret = bdrv_snapshot_delete(bs, snapshot_name);
1584         if (ret) {
1585             error_report("Could not delete snapshot '%s': %d (%s)",
1586                 snapshot_name, ret, strerror(-ret));
1587         }
1588         break;
1589     }
1590
1591     /* Cleanup */
1592     bdrv_delete(bs);
1593     if (ret) {
1594         return 1;
1595     }
1596     return 0;
1597 }
1598
1599 static int img_rebase(int argc, char **argv)
1600 {
1601     BlockDriverState *bs, *bs_old_backing = NULL, *bs_new_backing = NULL;
1602     BlockDriver *old_backing_drv, *new_backing_drv;
1603     char *filename;
1604     const char *fmt, *cache, *out_basefmt, *out_baseimg;
1605     int c, flags, ret;
1606     int unsafe = 0;
1607     int progress = 0;
1608
1609     /* Parse commandline parameters */
1610     fmt = NULL;
1611     cache = BDRV_DEFAULT_CACHE;
1612     out_baseimg = NULL;
1613     out_basefmt = NULL;
1614     for(;;) {
1615         c = getopt(argc, argv, "uhf:F:b:pt:");
1616         if (c == -1) {
1617             break;
1618         }
1619         switch(c) {
1620         case '?':
1621         case 'h':
1622             help();
1623             return 0;
1624         case 'f':
1625             fmt = optarg;
1626             break;
1627         case 'F':
1628             out_basefmt = optarg;
1629             break;
1630         case 'b':
1631             out_baseimg = optarg;
1632             break;
1633         case 'u':
1634             unsafe = 1;
1635             break;
1636         case 'p':
1637             progress = 1;
1638             break;
1639         case 't':
1640             cache = optarg;
1641             break;
1642         }
1643     }
1644
1645     if ((optind >= argc) || (!unsafe && !out_baseimg)) {
1646         help();
1647     }
1648     filename = argv[optind++];
1649
1650     qemu_progress_init(progress, 2.0);
1651     qemu_progress_print(0, 100);
1652
1653     flags = BDRV_O_RDWR | (unsafe ? BDRV_O_NO_BACKING : 0);
1654     ret = bdrv_parse_cache_flags(cache, &flags);
1655     if (ret < 0) {
1656         error_report("Invalid cache option: %s", cache);
1657         return -1;
1658     }
1659
1660     /*
1661      * Open the images.
1662      *
1663      * Ignore the old backing file for unsafe rebase in case we want to correct
1664      * the reference to a renamed or moved backing file.
1665      */
1666     bs = bdrv_new_open(filename, fmt, flags, true);
1667     if (!bs) {
1668         return 1;
1669     }
1670
1671     /* Find the right drivers for the backing files */
1672     old_backing_drv = NULL;
1673     new_backing_drv = NULL;
1674
1675     if (!unsafe && bs->backing_format[0] != '\0') {
1676         old_backing_drv = bdrv_find_format(bs->backing_format);
1677         if (old_backing_drv == NULL) {
1678             error_report("Invalid format name: '%s'", bs->backing_format);
1679             ret = -1;
1680             goto out;
1681         }
1682     }
1683
1684     if (out_basefmt != NULL) {
1685         new_backing_drv = bdrv_find_format(out_basefmt);
1686         if (new_backing_drv == NULL) {
1687             error_report("Invalid format name: '%s'", out_basefmt);
1688             ret = -1;
1689             goto out;
1690         }
1691     }
1692
1693     /* For safe rebasing we need to compare old and new backing file */
1694     if (unsafe) {
1695         /* Make the compiler happy */
1696         bs_old_backing = NULL;
1697         bs_new_backing = NULL;
1698     } else {
1699         char backing_name[1024];
1700
1701         bs_old_backing = bdrv_new("old_backing");
1702         bdrv_get_backing_filename(bs, backing_name, sizeof(backing_name));
1703         ret = bdrv_open(bs_old_backing, backing_name, BDRV_O_FLAGS,
1704                         old_backing_drv);
1705         if (ret) {
1706             error_report("Could not open old backing file '%s'", backing_name);
1707             goto out;
1708         }
1709         if (out_baseimg[0]) {
1710             bs_new_backing = bdrv_new("new_backing");
1711             ret = bdrv_open(bs_new_backing, out_baseimg, BDRV_O_FLAGS,
1712                         new_backing_drv);
1713             if (ret) {
1714                 error_report("Could not open new backing file '%s'",
1715                              out_baseimg);
1716                 goto out;
1717             }
1718         }
1719     }
1720
1721     /*
1722      * Check each unallocated cluster in the COW file. If it is unallocated,
1723      * accesses go to the backing file. We must therefore compare this cluster
1724      * in the old and new backing file, and if they differ we need to copy it
1725      * from the old backing file into the COW file.
1726      *
1727      * If qemu-img crashes during this step, no harm is done. The content of
1728      * the image is the same as the original one at any time.
1729      */
1730     if (!unsafe) {
1731         uint64_t num_sectors;
1732         uint64_t old_backing_num_sectors;
1733         uint64_t new_backing_num_sectors = 0;
1734         uint64_t sector;
1735         int n;
1736         uint8_t * buf_old;
1737         uint8_t * buf_new;
1738         float local_progress = 0;
1739
1740         buf_old = qemu_blockalign(bs, IO_BUF_SIZE);
1741         buf_new = qemu_blockalign(bs, IO_BUF_SIZE);
1742
1743         bdrv_get_geometry(bs, &num_sectors);
1744         bdrv_get_geometry(bs_old_backing, &old_backing_num_sectors);
1745         if (bs_new_backing) {
1746             bdrv_get_geometry(bs_new_backing, &new_backing_num_sectors);
1747         }
1748
1749         if (num_sectors != 0) {
1750             local_progress = (float)100 /
1751                 (num_sectors / MIN(num_sectors, IO_BUF_SIZE / 512));
1752         }
1753
1754         for (sector = 0; sector < num_sectors; sector += n) {
1755
1756             /* How many sectors can we handle with the next read? */
1757             if (sector + (IO_BUF_SIZE / 512) <= num_sectors) {
1758                 n = (IO_BUF_SIZE / 512);
1759             } else {
1760                 n = num_sectors - sector;
1761             }
1762
1763             /* If the cluster is allocated, we don't need to take action */
1764             ret = bdrv_is_allocated(bs, sector, n, &n);
1765             if (ret) {
1766                 continue;
1767             }
1768
1769             /*
1770              * Read old and new backing file and take into consideration that
1771              * backing files may be smaller than the COW image.
1772              */
1773             if (sector >= old_backing_num_sectors) {
1774                 memset(buf_old, 0, n * BDRV_SECTOR_SIZE);
1775             } else {
1776                 if (sector + n > old_backing_num_sectors) {
1777                     n = old_backing_num_sectors - sector;
1778                 }
1779
1780                 ret = bdrv_read(bs_old_backing, sector, buf_old, n);
1781                 if (ret < 0) {
1782                     error_report("error while reading from old backing file");
1783                     goto out;
1784                 }
1785             }
1786
1787             if (sector >= new_backing_num_sectors || !bs_new_backing) {
1788                 memset(buf_new, 0, n * BDRV_SECTOR_SIZE);
1789             } else {
1790                 if (sector + n > new_backing_num_sectors) {
1791                     n = new_backing_num_sectors - sector;
1792                 }
1793
1794                 ret = bdrv_read(bs_new_backing, sector, buf_new, n);
1795                 if (ret < 0) {
1796                     error_report("error while reading from new backing file");
1797                     goto out;
1798                 }
1799             }
1800
1801             /* If they differ, we need to write to the COW file */
1802             uint64_t written = 0;
1803
1804             while (written < n) {
1805                 int pnum;
1806
1807                 if (compare_sectors(buf_old + written * 512,
1808                     buf_new + written * 512, n - written, &pnum))
1809                 {
1810                     ret = bdrv_write(bs, sector + written,
1811                         buf_old + written * 512, pnum);
1812                     if (ret < 0) {
1813                         error_report("Error while writing to COW image: %s",
1814                             strerror(-ret));
1815                         goto out;
1816                     }
1817                 }
1818
1819                 written += pnum;
1820             }
1821             qemu_progress_print(local_progress, 100);
1822         }
1823
1824         qemu_vfree(buf_old);
1825         qemu_vfree(buf_new);
1826     }
1827
1828     /*
1829      * Change the backing file. All clusters that are different from the old
1830      * backing file are overwritten in the COW file now, so the visible content
1831      * doesn't change when we switch the backing file.
1832      */
1833     if (out_baseimg && *out_baseimg) {
1834         ret = bdrv_change_backing_file(bs, out_baseimg, out_basefmt);
1835     } else {
1836         ret = bdrv_change_backing_file(bs, NULL, NULL);
1837     }
1838
1839     if (ret == -ENOSPC) {
1840         error_report("Could not change the backing file to '%s': No "
1841                      "space left in the file header", out_baseimg);
1842     } else if (ret < 0) {
1843         error_report("Could not change the backing file to '%s': %s",
1844             out_baseimg, strerror(-ret));
1845     }
1846
1847     qemu_progress_print(100, 0);
1848     /*
1849      * TODO At this point it is possible to check if any clusters that are
1850      * allocated in the COW file are the same in the backing file. If so, they
1851      * could be dropped from the COW file. Don't do this before switching the
1852      * backing file, in case of a crash this would lead to corruption.
1853      */
1854 out:
1855     qemu_progress_end();
1856     /* Cleanup */
1857     if (!unsafe) {
1858         if (bs_old_backing != NULL) {
1859             bdrv_delete(bs_old_backing);
1860         }
1861         if (bs_new_backing != NULL) {
1862             bdrv_delete(bs_new_backing);
1863         }
1864     }
1865
1866     bdrv_delete(bs);
1867     if (ret) {
1868         return 1;
1869     }
1870     return 0;
1871 }
1872
1873 static int img_resize(int argc, char **argv)
1874 {
1875     int c, ret, relative;
1876     const char *filename, *fmt, *size;
1877     int64_t n, total_size;
1878     BlockDriverState *bs = NULL;
1879     QemuOpts *param;
1880     static QemuOptsList resize_options = {
1881         .name = "resize_options",
1882         .head = QTAILQ_HEAD_INITIALIZER(resize_options.head),
1883         .desc = {
1884             {
1885                 .name = BLOCK_OPT_SIZE,
1886                 .type = QEMU_OPT_SIZE,
1887                 .help = "Virtual disk size"
1888             }, {
1889                 /* end of list */
1890             }
1891         },
1892     };
1893
1894     /* Remove size from argv manually so that negative numbers are not treated
1895      * as options by getopt. */
1896     if (argc < 3) {
1897         help();
1898         return 1;
1899     }
1900
1901     size = argv[--argc];
1902
1903     /* Parse getopt arguments */
1904     fmt = NULL;
1905     for(;;) {
1906         c = getopt(argc, argv, "f:h");
1907         if (c == -1) {
1908             break;
1909         }
1910         switch(c) {
1911         case '?':
1912         case 'h':
1913             help();
1914             break;
1915         case 'f':
1916             fmt = optarg;
1917             break;
1918         }
1919     }
1920     if (optind >= argc) {
1921         help();
1922     }
1923     filename = argv[optind++];
1924
1925     /* Choose grow, shrink, or absolute resize mode */
1926     switch (size[0]) {
1927     case '+':
1928         relative = 1;
1929         size++;
1930         break;
1931     case '-':
1932         relative = -1;
1933         size++;
1934         break;
1935     default:
1936         relative = 0;
1937         break;
1938     }
1939
1940     /* Parse size */
1941     param = qemu_opts_create_nofail(&resize_options);
1942     if (qemu_opt_set(param, BLOCK_OPT_SIZE, size)) {
1943         /* Error message already printed when size parsing fails */
1944         ret = -1;
1945         qemu_opts_del(param);
1946         goto out;
1947     }
1948     n = qemu_opt_get_size(param, BLOCK_OPT_SIZE, 0);
1949     qemu_opts_del(param);
1950
1951     bs = bdrv_new_open(filename, fmt, BDRV_O_FLAGS | BDRV_O_RDWR, true);
1952     if (!bs) {
1953         ret = -1;
1954         goto out;
1955     }
1956
1957     if (relative) {
1958         total_size = bdrv_getlength(bs) + n * relative;
1959     } else {
1960         total_size = n;
1961     }
1962     if (total_size <= 0) {
1963         error_report("New image size must be positive");
1964         ret = -1;
1965         goto out;
1966     }
1967
1968     ret = bdrv_truncate(bs, total_size);
1969     switch (ret) {
1970     case 0:
1971         printf("Image resized.\n");
1972         break;
1973     case -ENOTSUP:
1974         error_report("This image does not support resize");
1975         break;
1976     case -EACCES:
1977         error_report("Image is read-only");
1978         break;
1979     default:
1980         error_report("Error resizing image (%d)", -ret);
1981         break;
1982     }
1983 out:
1984     if (bs) {
1985         bdrv_delete(bs);
1986     }
1987     if (ret) {
1988         return 1;
1989     }
1990     return 0;
1991 }
1992
1993 static const img_cmd_t img_cmds[] = {
1994 #define DEF(option, callback, arg_string)        \
1995     { option, callback },
1996 #include "qemu-img-cmds.h"
1997 #undef DEF
1998 #undef GEN_DOCS
1999     { NULL, NULL, },
2000 };
2001
2002 int main(int argc, char **argv)
2003 {
2004     const img_cmd_t *cmd;
2005     const char *cmdname;
2006
2007     error_set_progname(argv[0]);
2008
2009     qemu_init_main_loop();
2010     bdrv_init();
2011     if (argc < 2)
2012         help();
2013     cmdname = argv[1];
2014     argc--; argv++;
2015
2016     /* find the command */
2017     for(cmd = img_cmds; cmd->name != NULL; cmd++) {
2018         if (!strcmp(cmdname, cmd->name)) {
2019             return cmd->handler(argc, argv);
2020         }
2021     }
2022
2023     /* not found */
2024     help();
2025     return 0;
2026 }