Revision 153859be

b/.gitignore
19 19
qemu-nbd.8
20 20
qemu-nbd.pod
21 21
qemu-options.texi
22
qemu-img-cmds.texi
23
qemu-img-cmds.h
22 24
qemu-io
23 25
.gdbinit
24 26
*.a
b/Makefile
238 238

  
239 239
######################################################################
240 240

  
241
qemu-img.o: qemu-img-cmds.h
242

  
241 243
qemu-img$(EXESUF): qemu-img.o qemu-tool.o tool-osdep.o $(BLOCK_OBJS)
242 244

  
243 245
qemu-nbd$(EXESUF):  qemu-nbd.o qemu-tool.o tool-osdep.o $(BLOCK_OBJS)
......
246 248

  
247 249
qemu-img$(EXESUF) qemu-nbd$(EXESUF) qemu-io$(EXESUF): LIBS += -lz
248 250

  
251
qemu-img-cmds.h: $(SRC_PATH)/qemu-img-cmds.hx
252
	$(call quiet-command,sh $(SRC_PATH)/hxtool -h < $< > $@,"  GEN   $@")
253

  
249 254
clean:
250 255
# avoid old build problems by removing potentially incorrect old files
251 256
	rm -f config.mak config.h op-i386.h opc-i386.h gen-op-i386.h op-arm.h opc-arm.h gen-op-arm.h
......
257 262
        done
258 263

  
259 264
distclean: clean
260
	rm -f config-host.mak config-host.h $(DOCS) qemu-options.texi
265
	rm -f config-host.mak config-host.h $(DOCS) qemu-options.texi qemu-img-cmds.texi
261 266
	rm -f qemu-{doc,tech}.{info,aux,cp,dvi,fn,info,ky,log,pg,toc,tp,vr}
262 267
	for d in $(TARGET_DIRS) libhw32 libhw64; do \
263 268
	rm -rf $$d || exit 1 ; \
......
335 340
qemu-monitor.texi: $(SRC_PATH)/qemu-monitor.hx
336 341
	$(call quiet-command,sh $(SRC_PATH)/hxtool -t < $< > $@,"  GEN   $@")
337 342

  
343
qemu-img-cmds.texi: $(SRC_PATH)/qemu-img-cmds.hx
344
	$(call quiet-command,sh $(SRC_PATH)/hxtool -t < $< > $@,"  GEN   $@")
345

  
338 346
qemu.1: qemu-doc.texi qemu-options.texi qemu-monitor.texi
339 347
	$(call quiet-command, \
340 348
	  perl -Ww -- $(SRC_PATH)/texi2pod.pl $< qemu.pod && \
341 349
	  pod2man --section=1 --center=" " --release=" " qemu.pod > $@, \
342 350
	  "  GEN   $@")
343 351

  
344
qemu-img.1: qemu-img.texi
352
qemu-img.1: qemu-img.texi qemu-img-cmds.texi
345 353
	$(call quiet-command, \
346 354
	  perl -Ww -- $(SRC_PATH)/texi2pod.pl $< qemu-img.pod && \
347 355
	  pod2man --section=1 --center=" " --release=" " qemu-img.pod > $@, \
......
359 367

  
360 368
html: qemu-doc.html qemu-tech.html
361 369

  
362
qemu-doc.dvi qemu-doc.html qemu-doc.info: qemu-img.texi qemu-nbd.texi qemu-options.texi qemu-monitor.texi
370
qemu-doc.dvi qemu-doc.html qemu-doc.info: qemu-img.texi qemu-nbd.texi qemu-options.texi qemu-monitor.texi qemu-img-cmds.texi
363 371

  
364 372
VERSION ?= $(shell cat VERSION)
365 373
FILE = qemu-$(VERSION)
b/qemu-img-cmds.hx
1
HXCOMM Use DEFHEADING() to define headings in both help text and texi
2
HXCOMM Text between STEXI and ETEXI are copied to texi version and
3
HXCOMM discarded from C version
4
HXCOMM DEF(command, callback, arg_string) is used to construct
5
HXCOMM command structures and help message.
6
HXCOMM HXCOMM can be used for comments, discarded from both texi and C
7

  
8
STEXI
9
@table @option
10
STEXI
11

  
12
DEF("check", img_check,
13
    "check [-f fmt] filename")
14
STEXI
15
@item check [-f @var{fmt}] @var{filename}
16
ETEXI
17

  
18
DEF("create", img_create,
19
    "create [-F fmt] [-b base_image] [-f fmt] [-o options] filename [size]")
20
STEXI
21
@item create [-F @var{base_fmt}] [-b @var{base_image}] [-f @var{fmt}] [-o @var{options}] @var{filename} [@var{size}]
22
ETEXI
23

  
24
DEF("commit", img_commit,
25
    "commit [-f fmt] filename")
26
STEXI
27
@item commit [-f @var{fmt}] @var{filename}
28
ETEXI
29

  
30
DEF("convert", img_convert,
31
    "convert [-c] [-f fmt] [-O output_fmt] [-o options] [-B output_base_image] filename [filename2 [...]] output_filename")
32
STEXI
33
@item convert [-c] [-f @var{fmt}] [-O @var{output_fmt}] [-o @var{options}] [-B @var{output_base_image}] @var{filename} [@var{filename2} [...]] @var{output_filename}
34
ETEXI
35

  
36
DEF("info", img_info,
37
    "info [-f fmt] filename")
38
STEXI
39
@item info [-f @var{fmt}] @var{filename}
40
ETEXI
41

  
42
DEF("snapshot", img_snapshot,
43
    "snapshot [-l | -a snapshot | -c snapshot | -d snapshot] filename")
44
STEXI
45
@item snapshot [-l | -a @var{snapshot} | -c @var{snapshot} | -d @var{snapshot}] @var{filename}
46
@end table
47
ETEXI
b/qemu-img.c
31 31
#include <windows.h>
32 32
#endif
33 33

  
34
typedef struct img_cmd_t {
35
    const char *name;
36
    int (*handler)(int argc, char **argv);
37
} img_cmd_t;
38

  
34 39
/* Default to cache=writeback as data integrity is not important for qemu-tcg. */
35 40
#define BRDV_O_FLAGS BDRV_O_CACHE_WB
36 41

  
......
58 63
           "QEMU disk image utility\n"
59 64
           "\n"
60 65
           "Command syntax:\n"
61
           "  check [-f fmt] filename\n"
62
           "  create [-F fmt] [-b base_image] [-f fmt] [-o options] filename [size]\n"
63
           "  commit [-f fmt] filename\n"
64
           "  convert [-c] [-f fmt] [-O output_fmt] [-o options] [-B output_base_image] filename [filename2 [...]] output_filename\n"
65
           "  info [-f fmt] filename\n"
66
           "  snapshot [-l | -a snapshot | -c snapshot | -d snapshot] filename\n"
66
#define DEF(option, callback, arg_string)        \
67
           "  " arg_string "\n"
68
#include "qemu-img-cmds.h"
69
#undef DEF
70
#undef GEN_DOCS
67 71
           "\n"
68 72
           "Command parameters:\n"
69 73
           "  'filename' is a disk image filename\n"
......
919 923
#define SNAPSHOT_APPLY  3
920 924
#define SNAPSHOT_DELETE 4
921 925

  
922
static void img_snapshot(int argc, char **argv)
926
static int img_snapshot(int argc, char **argv)
923 927
{
924 928
    BlockDriverState *bs;
925 929
    QEMUSnapshotInfo sn;
......
936 940
        switch(c) {
937 941
        case 'h':
938 942
            help();
939
            return;
943
            return 0;
940 944
        case 'l':
941 945
            if (action) {
942 946
                help();
943
                return;
947
                return 0;
944 948
            }
945 949
            action = SNAPSHOT_LIST;
946 950
            break;
947 951
        case 'a':
948 952
            if (action) {
949 953
                help();
950
                return;
954
                return 0;
951 955
            }
952 956
            action = SNAPSHOT_APPLY;
953 957
            snapshot_name = optarg;
......
955 959
        case 'c':
956 960
            if (action) {
957 961
                help();
958
                return;
962
                return 0;
959 963
            }
960 964
            action = SNAPSHOT_CREATE;
961 965
            snapshot_name = optarg;
......
963 967
        case 'd':
964 968
            if (action) {
965 969
                help();
966
                return;
970
                return 0;
967 971
            }
968 972
            action = SNAPSHOT_DELETE;
969 973
            snapshot_name = optarg;
......
1021 1025

  
1022 1026
    /* Cleanup */
1023 1027
    bdrv_delete(bs);
1028

  
1029
    return 0;
1024 1030
}
1025 1031

  
1032
static const img_cmd_t img_cmds[] = {
1033
#define DEF(option, callback, arg_string)        \
1034
    { option, callback },
1035
#include "qemu-img-cmds.h"
1036
#undef DEF
1037
#undef GEN_DOCS
1038
    { NULL, NULL, },
1039
};
1040

  
1026 1041
int main(int argc, char **argv)
1027 1042
{
1028
    const char *cmd;
1043
    const img_cmd_t *cmd;
1044
    const char *cmdname;
1029 1045

  
1030 1046
    bdrv_init();
1031 1047
    if (argc < 2)
1032 1048
        help();
1033
    cmd = argv[1];
1049
    cmdname = argv[1];
1034 1050
    argc--; argv++;
1035
    if (!strcmp(cmd, "create")) {
1036
        img_create(argc, argv);
1037
    } else if (!strcmp(cmd, "check")) {
1038
        img_check(argc, argv);
1039
    } else if (!strcmp(cmd, "commit")) {
1040
        img_commit(argc, argv);
1041
    } else if (!strcmp(cmd, "convert")) {
1042
        img_convert(argc, argv);
1043
    } else if (!strcmp(cmd, "info")) {
1044
        img_info(argc, argv);
1045
    } else if (!strcmp(cmd, "snapshot")) {
1046
        img_snapshot(argc, argv);
1047
    } else {
1048
        help();
1051

  
1052
    /* find the command */
1053
    for(cmd = img_cmds; cmd->name != NULL; cmd++) {
1054
        if (!strcmp(cmdname, cmd->name)) {
1055
            return cmd->handler(argc, argv);
1056
        }
1049 1057
    }
1058

  
1059
    /* not found */
1060
    help();
1050 1061
    return 0;
1051 1062
}
b/qemu-img.texi
7 7
@c man begin OPTIONS
8 8

  
9 9
The following commands are supported:
10
@table @option
11
@item create [-F @var{base_fmt}] [-b @var{base_image}] [-f @var{fmt}] [-o @var{options}] @var{filename} [@var{size}]
12
@item commit [-f @var{fmt}] @var{filename}
13
@item convert [-c] [-f @var{fmt}] [-O @var{output_fmt}] [-o @var{options}] [-B @var{output_base_image}] @var{filename} [@var{filename2} [...]] @var{output_filename}
14
@item info [-f @var{fmt}] @var{filename}
15
@item snapshot [-l | -a @var{snapshot} | -c @var{snapshot} | -d @var{snapshot}] @var{filename}
16
@end table
10

  
11
@include qemu-img-cmds.texi
17 12

  
18 13
Command parameters:
19 14
@table @var

Also available in: Unified diff