Statistics
| Branch: | Revision:

root / vhd / lib / vhd-util-repair.c @ abdb293f

History | View | Annotate | Download (2.4 kB)

1 abdb293f Chrysostomos Nanakos
/*
2 abdb293f Chrysostomos Nanakos
 * Copyright (c) 2007, XenSource Inc.
3 abdb293f Chrysostomos Nanakos
 * Copyright (c) 2010, Citrix Systems, Inc.
4 abdb293f Chrysostomos Nanakos
 *
5 abdb293f Chrysostomos Nanakos
 * All rights reserved.
6 abdb293f Chrysostomos Nanakos
 *
7 abdb293f Chrysostomos Nanakos
 * Redistribution and use in source and binary forms, with or without
8 abdb293f Chrysostomos Nanakos
 * modification, are permitted provided that the following conditions are met:
9 abdb293f Chrysostomos Nanakos
 *     * Redistributions of source code must retain the above copyright
10 abdb293f Chrysostomos Nanakos
 *       notice, this list of conditions and the following disclaimer.
11 abdb293f Chrysostomos Nanakos
 *     * Redistributions in binary form must reproduce the above copyright
12 abdb293f Chrysostomos Nanakos
 *       notice, this list of conditions and the following disclaimer in the
13 abdb293f Chrysostomos Nanakos
 *       documentation and/or other materials provided with the distribution.
14 abdb293f Chrysostomos Nanakos
 *     * Neither the name of XenSource Inc. nor the names of its contributors
15 abdb293f Chrysostomos Nanakos
 *       may be used to endorse or promote products derived from this software
16 abdb293f Chrysostomos Nanakos
 *       without specific prior written permission.
17 abdb293f Chrysostomos Nanakos
 *
18 abdb293f Chrysostomos Nanakos
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19 abdb293f Chrysostomos Nanakos
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20 abdb293f Chrysostomos Nanakos
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21 abdb293f Chrysostomos Nanakos
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
22 abdb293f Chrysostomos Nanakos
 * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
23 abdb293f Chrysostomos Nanakos
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
24 abdb293f Chrysostomos Nanakos
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
25 abdb293f Chrysostomos Nanakos
 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
26 abdb293f Chrysostomos Nanakos
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
27 abdb293f Chrysostomos Nanakos
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
28 abdb293f Chrysostomos Nanakos
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 abdb293f Chrysostomos Nanakos
 */
30 abdb293f Chrysostomos Nanakos
31 abdb293f Chrysostomos Nanakos
#ifdef HAVE_CONFIG_H
32 abdb293f Chrysostomos Nanakos
#include "config.h"
33 abdb293f Chrysostomos Nanakos
#endif
34 abdb293f Chrysostomos Nanakos
35 abdb293f Chrysostomos Nanakos
#include <errno.h>
36 abdb293f Chrysostomos Nanakos
#include <fcntl.h>
37 abdb293f Chrysostomos Nanakos
#include <stdio.h>
38 abdb293f Chrysostomos Nanakos
#include <stdlib.h>
39 abdb293f Chrysostomos Nanakos
#include <unistd.h>
40 abdb293f Chrysostomos Nanakos
41 abdb293f Chrysostomos Nanakos
#include "libvhd.h"
42 abdb293f Chrysostomos Nanakos
43 abdb293f Chrysostomos Nanakos
int
44 abdb293f Chrysostomos Nanakos
vhd_util_repair(int argc, char **argv)
45 abdb293f Chrysostomos Nanakos
{
46 abdb293f Chrysostomos Nanakos
        char *name;
47 abdb293f Chrysostomos Nanakos
        int err, c;
48 abdb293f Chrysostomos Nanakos
        vhd_context_t vhd;
49 abdb293f Chrysostomos Nanakos
50 abdb293f Chrysostomos Nanakos
        name = NULL;
51 abdb293f Chrysostomos Nanakos
52 abdb293f Chrysostomos Nanakos
        if (!argc || !argv)
53 abdb293f Chrysostomos Nanakos
                goto usage;
54 abdb293f Chrysostomos Nanakos
55 abdb293f Chrysostomos Nanakos
        optind = 0;
56 abdb293f Chrysostomos Nanakos
        while ((c = getopt(argc, argv, "n:h")) != -1) {
57 abdb293f Chrysostomos Nanakos
                switch (c) {
58 abdb293f Chrysostomos Nanakos
                case 'n':
59 abdb293f Chrysostomos Nanakos
                        name = optarg;
60 abdb293f Chrysostomos Nanakos
                        break;
61 abdb293f Chrysostomos Nanakos
                case 'h':
62 abdb293f Chrysostomos Nanakos
                default:
63 abdb293f Chrysostomos Nanakos
                        goto usage;
64 abdb293f Chrysostomos Nanakos
                }
65 abdb293f Chrysostomos Nanakos
        }
66 abdb293f Chrysostomos Nanakos
67 abdb293f Chrysostomos Nanakos
        if (!name || optind != argc)
68 abdb293f Chrysostomos Nanakos
                goto usage;
69 abdb293f Chrysostomos Nanakos
70 abdb293f Chrysostomos Nanakos
        err = vhd_open(&vhd, name, VHD_OPEN_RDWR);
71 abdb293f Chrysostomos Nanakos
        if (err) {
72 abdb293f Chrysostomos Nanakos
                printf("error opening %s: %d\n", name, err);
73 abdb293f Chrysostomos Nanakos
                return err;
74 abdb293f Chrysostomos Nanakos
        }
75 abdb293f Chrysostomos Nanakos
76 abdb293f Chrysostomos Nanakos
        err = vhd_write_footer(&vhd, &vhd.footer);
77 abdb293f Chrysostomos Nanakos
        if (err)
78 abdb293f Chrysostomos Nanakos
                printf("error writing footer: %d\n", err);
79 abdb293f Chrysostomos Nanakos
80 abdb293f Chrysostomos Nanakos
        vhd_close(&vhd);
81 abdb293f Chrysostomos Nanakos
        return err;
82 abdb293f Chrysostomos Nanakos
83 abdb293f Chrysostomos Nanakos
usage:
84 abdb293f Chrysostomos Nanakos
        printf("options: <-n name> [-h help]\n");
85 abdb293f Chrysostomos Nanakos
        return -EINVAL;
86 abdb293f Chrysostomos Nanakos
}