X-Git-Url: http://git.annexia.org/?a=blobdiff_plain;f=fish%2Foptions.h;fp=fish%2Foptions.h;h=b0bbdeb2883e260601338837be9eb651e3172cd7;hb=c66d6f215e8303d4eaf8ccfdb6a58cff04ccc485;hp=0000000000000000000000000000000000000000;hpb=d600342b7d29c0176ff96a7807ebb38303ecb3a6;p=libguestfs.git diff --git a/fish/options.h b/fish/options.h new file mode 100644 index 0000000..b0bbdeb --- /dev/null +++ b/fish/options.h @@ -0,0 +1,186 @@ +/* libguestfs - guestfish and guestmount shared option parsing + * Copyright (C) 2010 Red Hat Inc. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#ifndef OPTIONS_H +#define OPTIONS_H + +#ifdef HAVE_GETTEXT +#include "gettext.h" +#ifndef _ +#define _(str) dgettext(PACKAGE, (str)) +#endif +#ifndef N_ +#define N_(str) dgettext(PACKAGE, (str)) +#endif +#else +#ifndef _ +#define _(str) str +#endif +#ifndef _ +#define N_(str) str +#endif +#endif + +#ifndef STREQ +#define STREQ(a,b) (strcmp((a),(b)) == 0) +#endif +#ifndef STRCASEEQ +#define STRCASEEQ(a,b) (strcasecmp((a),(b)) == 0) +#endif +#ifndef STRNEQ +#define STRNEQ(a,b) (strcmp((a),(b)) != 0) +#endif +#ifndef STRCASENEQ +#define STRCASENEQ(a,b) (strcasecmp((a),(b)) != 0) +#endif +#ifndef STREQLEN +#define STREQLEN(a,b,n) (strncmp((a),(b),(n)) == 0) +#endif +#ifndef STRCASEEQLEN +#define STRCASEEQLEN(a,b,n) (strncasecmp((a),(b),(n)) == 0) +#endif +#ifndef STRNEQLEN +#define STRNEQLEN(a,b,n) (strncmp((a),(b),(n)) != 0) +#endif +#ifndef STRCASENEQLEN +#define STRCASENEQLEN(a,b,n) (strncasecmp((a),(b),(n)) != 0) +#endif +#ifndef STRPREFIX +#define STRPREFIX(a,b) (strncmp((a),(b),strlen((b))) == 0) +#endif + +/* Provided by guestfish or guestmount. */ +extern guestfs_h *g; +extern int read_only; +extern int verbose; +extern int inspector; +extern const char *libvirt_uri; +extern const char *program_name; + +/* List of drives added via -a, -d or -N options. */ +struct drv { + struct drv *next; + enum { drv_a, drv_d, drv_N } type; + union { + struct { + char *filename; /* disk filename */ + const char *format; /* format (NULL == autodetect) */ + } a; + struct { + char *guest; /* guest name */ + } d; + struct { + char *filename; /* disk filename (testX.img) */ + void *data; /* prepared type */ + void (*data_free)(void*); /* function to free 'data' */ + char *device; /* device inside the appliance */ + } N; + }; +}; + +struct mp { + struct mp *next; + char *device; + char *mountpoint; +}; + +/* in inspect.c */ +extern void inspect_mount (void); +extern void print_inspect_prompt (void); + +/* in options.c */ +extern char add_drives (struct drv *drv, char next_drive); +extern void mount_mps (struct mp *mp); +extern void free_drives (struct drv *drv); +extern void free_mps (struct mp *mp); + +/* in virt.c */ +extern int add_libvirt_drives (const char *guest); + +#define OPTION_a \ + if (access (optarg, R_OK) != 0) { \ + perror (optarg); \ + exit (EXIT_FAILURE); \ + } \ + drv = malloc (sizeof (struct drv)); \ + if (!drv) { \ + perror ("malloc"); \ + exit (EXIT_FAILURE); \ + } \ + drv->type = drv_a; \ + drv->a.filename = optarg; \ + drv->a.format = format; \ + drv->next = drvs; \ + drvs = drv + +#define OPTION_c \ + libvirt_uri = optarg + +#define OPTION_d \ + drv = malloc (sizeof (struct drv)); \ + if (!drv) { \ + perror ("malloc"); \ + exit (EXIT_FAILURE); \ + } \ + drv->type = drv_d; \ + drv->d.guest = optarg; \ + drv->next = drvs; \ + drvs = drv + +#define OPTION_i \ + inspector = 1 + +#define OPTION_m \ + mp = malloc (sizeof (struct mp)); \ + if (!mp) { \ + perror ("malloc"); \ + exit (EXIT_FAILURE); \ + } \ + p = strchr (optarg, ':'); \ + if (p) { \ + *p = '\0'; \ + mp->mountpoint = p+1; \ + } else \ + mp->mountpoint = bad_cast ("/"); \ + mp->device = optarg; \ + mp->next = mps; \ + mps = mp + +#define OPTION_n \ + guestfs_set_autosync (g, 0) + +#define OPTION_r \ + read_only = 1 + +#define OPTION_v \ + verbose++; \ + guestfs_set_verbose (g, verbose) + +#define OPTION_V \ + { \ + struct guestfs_version *v = guestfs_version (g); \ + printf ("%s %"PRIi64".%"PRIi64".%"PRIi64"%s\n", \ + program_name, \ + v->major, v->minor, v->release, v->extra); \ + exit (EXIT_SUCCESS); \ + } + +#define OPTION_x \ + guestfs_set_trace (g, 1) + +#endif /* OPTIONS_H */