[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 3/5] Introduce qemu-img check subcommand
From: |
kwolf |
Subject: |
[Qemu-devel] [PATCH 3/5] Introduce qemu-img check subcommand |
Date: |
Fri, 17 Apr 2009 16:01:58 +0200 |
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>
---
qemu-img.c | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 62 insertions(+), 0 deletions(-)
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")) {
--
1.6.0.6
- [Qemu-devel] [PATCH 0/5] Add qemu-img check subcommand, Kevin Wolf, 2009/04/17
- [Qemu-devel] [PATCH 1/5] qcow2: Fix warnings in check_refcount(), Kevin Wolf, 2009/04/17
- [Qemu-devel] [PATCH 2/5] Introduce bdrv_check, kwolf, 2009/04/17
- [Qemu-devel] [PATCH 3/5] Introduce qemu-img check subcommand,
kwolf <=
- [Qemu-devel] [PATCH 1/5] qcow2: Fix warnings in check_refcount(), kwolf, 2009/04/17
- Re: [Qemu-devel] [PATCH 1/5] qcow2: Fix warnings in check_refcount(), Anthony Liguori, 2009/04/17
- Re: [Qemu-devel] [PATCH 1/5] qcow2: Fix warnings in check_refcount(), Kevin Wolf, 2009/04/17
- Re: [Qemu-devel] [PATCH 1/5] qcow2: Fix warnings in check_refcount(), Anthony Liguori, 2009/04/17
- Re: [Qemu-devel] [PATCH 1/5] qcow2: Fix warnings in check_refcount(), Kevin Wolf, 2009/04/17
- Re: [Qemu-devel] [PATCH 1/5] qcow2: Fix warnings in check_refcount(), Anthony Liguori, 2009/04/17
- Re: [Qemu-devel] [PATCH 1/5] qcow2: Fix warnings in check_refcount(), Kevin Wolf, 2009/04/17
- Re: [Qemu-devel] [PATCH 1/5] qcow2: Fix warnings in check_refcount(), Anthony Liguori, 2009/04/17
- Re: [Qemu-devel] [PATCH 1/5] qcow2: Fix warnings in check_refcount(), Ryan Harper, 2009/04/17
- Re: [Qemu-devel] [PATCH 1/5] qcow2: Fix warnings in check_refcount(), Christoph Hellwig, 2009/04/20