source: trunk/packages/xen-3.1/xen-3.1/tools/blktap/drivers/qcow-create.c @ 34

Last change on this file since 34 was 34, checked in by hartmans, 18 years ago

Add xen and xen-common

File size: 3.4 KB
Line 
1/* qcow-create.c
2 *
3 * Generates a qcow format disk.
4 *
5 * (c) 2006 Andrew Warfield and Julian Chesterfield
6 *
7 * This program is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU General Public License version 2
9 * as published by the Free Software Foundation; or, when distributed
10 * separately from the Linux kernel or incorporated into other
11 * software packages, subject to the following license:
12 *
13 * Permission is hereby granted, free of charge, to any person obtaining a copy
14 * of this source file (the "Software"), to deal in the Software without
15 * restriction, including without limitation the rights to use, copy, modify,
16 * merge, publish, distribute, sublicense, and/or sell copies of the Software,
17 * and to permit persons to whom the Software is furnished to do so, subject to
18 * the following conditions:
19 *
20 * The above copyright notice and this permission notice shall be included in
21 * all copies or substantial portions of the Software.
22 *
23 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
24 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
25 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
26 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
27 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
28 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
29 * IN THE SOFTWARE.
30 */
31
32#include <errno.h>
33#include <fcntl.h>
34#include <stdio.h>
35#include <stdlib.h>
36#include <unistd.h>
37#include <sys/statvfs.h>
38#include <sys/stat.h>
39#include <sys/ioctl.h>
40#include <linux/fs.h>
41#include <string.h>
42#include "tapdisk.h"
43
44#if 1
45#define DFPRINTF(_f, _a...) fprintf ( stderr, _f , ## _a )
46#else
47#define DFPRINTF(_f, _a...) ((void)0)
48#endif
49
50#define MAX_NAME_LEN 1000
51
52void help(void)
53{
54        fprintf(stderr, "Qcow-utils: v1.0.0\n");
55        fprintf(stderr, 
56                "usage: qcow-create [-h help] [-r reserve] <SIZE(MB)> <FILENAME> "
57                "[<BACKING_FILENAME>]\n"); 
58        exit(-1);
59}
60
61int main(int argc, char *argv[])
62{
63        int ret = -1, c, backed = 0;
64        int sparse =  1;
65        uint64_t size;
66        char filename[MAX_NAME_LEN], bfilename[MAX_NAME_LEN];
67
68        for(;;) {
69                c = getopt(argc, argv, "hr");
70                if (c == -1)
71                        break;
72                switch(c) {
73                case 'h':
74                        help();
75                        exit(0);
76                        break;
77                case 'r':
78                        sparse = 0;
79                        break;
80                default:
81                        fprintf(stderr, "Unknown option\n");
82                        help();
83                }
84        }
85
86        printf("Optind %d, argc %d\n", optind, argc);
87        if ( !(optind == (argc - 2) || optind == (argc - 3)) )
88                help();
89
90        size = atoi(argv[optind++]);
91        size = size << 20;
92
93        if (snprintf(filename, MAX_NAME_LEN, "%s",argv[optind++]) >=
94                MAX_NAME_LEN) {
95                fprintf(stderr,"Device name too long\n");
96                exit(-1);
97        }
98
99        if (optind != argc) {
100                /*Backing file argument*/
101                backed = 1;
102                if (snprintf(bfilename, MAX_NAME_LEN, "%s",argv[optind++]) >=
103                        MAX_NAME_LEN) {
104                        fprintf(stderr,"Device name too long\n");
105                        exit(-1);
106                }
107        }
108
109        DFPRINTF("Creating file size %llu, name %s\n",(long long unsigned)size, filename);
110        if (!backed)
111                ret = qcow_create(filename,size,NULL,sparse);
112        else
113                ret = qcow_create(filename,size,bfilename,sparse);
114
115        if (ret < 0)
116                DPRINTF("Unable to create QCOW file\n");
117        else
118                DPRINTF("QCOW file successfully created\n");
119
120        return 0;
121}
Note: See TracBrowser for help on using the repository browser.