From 48896281bebc5c69760f4e47625e4db81e3a9004 Mon Sep 17 00:00:00 2001 From: Wolfgang Bumiller Date: Wed, 9 Dec 2015 14:46:49 +0100 Subject: [PATCH 13/47] vma: add 'config' command to dump the config --- vma.c | 64 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) diff --git a/vma.c b/vma.c index d55874a..79bdd00 100644 --- a/vma.c +++ b/vma.c @@ -26,6 +26,7 @@ static void help(void) "usage: vma command [command options]\n" "\n" "vma list \n" + "vma config [-c config]\n" "vma create [-c config] pathname ...\n" "vma extract [-r ] \n" "vma verify [-v]\n" @@ -604,6 +605,67 @@ static int create_archive(int argc, char **argv) return 0; } +static int dump_config(int argc, char **argv) +{ + int c, ret = 0; + const char *filename; + const char *config_name = "qemu-server.conf"; + + for (;;) { + c = getopt(argc, argv, "hc:"); + if (c == -1) { + break; + } + switch (c) { + case '?': + case 'h': + help(); + break; + case 'c': + config_name = optarg; + break; + default: + help(); + } + } + + /* Get the filename */ + if ((optind + 1) != argc) { + help(); + } + filename = argv[optind++]; + + Error *errp = NULL; + VmaReader *vmar = vma_reader_create(filename, &errp); + + if (!vmar) { + g_error("%s", error_get_pretty(errp)); + } + + int found = 0; + GList *l = vma_reader_get_config_data(vmar); + while (l && l->data) { + VmaConfigData *cdata = (VmaConfigData *)l->data; + l = g_list_next(l); + if (strcmp(cdata->name, config_name) == 0) { + found = 1; + fwrite(cdata->data, cdata->len, 1, stdout); + break; + } + } + + vma_reader_destroy(vmar); + + bdrv_close_all(); + + if (!found) { + fprintf(stderr, "unable to find configuration data '%s'\n", config_name); + return -1; + } + + return ret; +} + int main(int argc, char **argv) { const char *cmdname; @@ -633,6 +695,8 @@ int main(int argc, char **argv) return extract_content(argc, argv); } else if (!strcmp(cmdname, "verify")) { return verify_content(argc, argv); + } else if (!strcmp(cmdname, "config")) { + return dump_config(argc, argv); } help(); -- 2.1.4