[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-commits] [COMMIT 4e5ffde] Introduce qemu-img check subcommand (Kev
From: |
Anthony Liguori |
Subject: |
[Qemu-commits] [COMMIT 4e5ffde] Introduce qemu-img check subcommand (Kevin Wolf) |
Date: |
Tue, 21 Apr 2009 23:16:23 -0000 |
From: aliguori <address@hidden>
From: Kevin Wolf <address@hidden>
Now that block drivers can provide check functions, expose them through
qemu-img.
Signed-off-by: Kevin Wolf <address@hidden>
Signed-off-by: Anthony Liguori <address@hidden>
git-svn-id: svn://svn.savannah.nongnu.org/qemu/address@hidden
c046a42c-6fe2-441c-8c8c-71466251a162
diff --git a/qemu-img.c b/qemu-img.c
index ccf4a6f..29149a2 100644
--- a/qemu-img.c
+++ b/qemu-img.c
@@ -58,6 +58,7 @@ static void help(void)
"QEMU disk image utility\n"
"\n"
"Command syntax:\n"
+ " check [-f fmt] filename\n"
" create [-e] [-6] [-F fmt] [-b base_image] [-f fmt] filename
[size]\n"
" commit [-f fmt] filename\n"
" convert [-c] [-e] [-6] [-f fmt] [-O output_fmt] [-B
output_base_image] filename [filename2 [...]] output_filename\n"
@@ -315,6 +316,65 @@ static int img_create(int argc, char **argv)
return 0;
}
+static int img_check(int argc, char **argv)
+{
+ int c, ret;
+ const char *filename, *fmt;
+ BlockDriver *drv;
+ BlockDriverState *bs;
+
+ fmt = NULL;
+ for(;;) {
+ c = getopt(argc, argv, "f:h");
+ if (c == -1)
+ break;
+ switch(c) {
+ case 'h':
+ help();
+ break;
+ case 'f':
+ fmt = optarg;
+ break;
+ }
+ }
+ if (optind >= argc)
+ help();
+ filename = argv[optind++];
+
+ bs = bdrv_new("");
+ if (!bs)
+ error("Not enough memory");
+ if (fmt) {
+ drv = bdrv_find_format(fmt);
+ if (!drv)
+ error("Unknown file format '%s'", fmt);
+ } else {
+ drv = NULL;
+ }
+ if (bdrv_open2(bs, filename, BRDV_O_FLAGS, drv) < 0) {
+ error("Could not open '%s'", filename);
+ }
+ ret = bdrv_check(bs);
+ switch(ret) {
+ case 0:
+ printf("No errors were found on the image.\n");
+ break;
+ case -ENOTSUP:
+ error("This image format does not support checks");
+ break;
+ default:
+ if (ret < 0) {
+ error("An error occurred during the check");
+ } else {
+ printf("%d errors were found on the image.\n", ret);
+ }
+ break;
+ }
+
+ bdrv_delete(bs);
+ return 0;
+}
+
static int img_commit(int argc, char **argv)
{
int c, ret;
@@ -888,6 +948,8 @@ int main(int argc, char **argv)
argc--; argv++;
if (!strcmp(cmd, "create")) {
img_create(argc, argv);
+ } else if (!strcmp(cmd, "check")) {
+ img_check(argc, argv);
} else if (!strcmp(cmd, "commit")) {
img_commit(argc, argv);
} else if (!strcmp(cmd, "convert")) {
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Qemu-commits] [COMMIT 4e5ffde] Introduce qemu-img check subcommand (Kevin Wolf),
Anthony Liguori <=