*
* 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Derived from the example program 'fusexmp.c':
* Copyright (C) 2001-2007 Miklos Szeredi <miklos@szeredi.hu>
#include <sys/time.h>
#include <sys/types.h>
#include <locale.h>
+#include <libintl.h>
#include <fuse.h>
#include <guestfs.h>
fg_read (const char *path, char *buf, size_t size, off_t offset,
struct fuse_file_info *fi)
{
- TRACE_CALL ("%s, %p, %zu, %ld", path, buf, size, offset);
+ TRACE_CALL ("%s, %p, %zu, %ld", path, buf, size, (long) offset);
char *r;
size_t rsize;
fg_write (const char *path, const char *buf, size_t size,
off_t offset, struct fuse_file_info *fi)
{
- TRACE_CALL ("%s, %p, %zu, %ld", path, buf, size, offset);
+ TRACE_CALL ("%s, %p, %zu, %ld", path, buf, size, (long) offset);
if (read_only) return -EROFS;
bindtextdomain (PACKAGE, LOCALEBASEDIR);
textdomain (PACKAGE);
+ parse_config ();
+
enum { HELP_OPTION = CHAR_MAX + 1 };
/* The command line arguments are broadly compatible with (a subset
*/
ADD_FUSE_ARG ("-s");
- /* If developing, add ./appliance to the path. Note that libtools
- * interferes with this because uninstalled guestfish is a shell
- * script that runs the real program with an absolute path. Detect
- * that too.
- *
- * BUT if LIBGUESTFS_PATH environment variable is already set by
- * the user, then don't override it.
- */
- if (getenv ("LIBGUESTFS_PATH") == NULL &&
- argv[0] &&
- (argv[0][0] != '/' || strstr (argv[0], "/.libs/lt-") != NULL))
- guestfs_set_path (g, "appliance:" GUESTFS_DEFAULT_PATH);
-
for (;;) {
c = getopt_long (argc, argv, options, long_options, &option_index);
if (c == -1) break;
}
/* Check we have the right options. */
- if (!drvs || !(mps || inspector)) {
- fprintf (stderr,
- _("%s: must have at least one -a/-d and at least one -m/-i option\n"),
- program_name);
- exit (EXIT_FAILURE);
+ if (!live) {
+ if (!drvs || !(mps || inspector)) {
+ fprintf (stderr,
+ _("%s: must have at least one -a/-d and at least one -m/-i option\n"),
+ program_name);
+ exit (EXIT_FAILURE);
+ }
+ } else {
+ size_t count_d = 0, count_other = 0;
+ struct drv *drv;
+
+ if (read_only) {
+ fprintf (stderr,
+ _("%s: --live is not compatible with --ro option\n"),
+ program_name);
+ exit (EXIT_FAILURE);
+ }
+
+ if (inspector) {
+ fprintf (stderr,
+ _("%s: --live is not compatible with -i option\n"),
+ program_name);
+ exit (EXIT_FAILURE);
+ }
+
+ /* --live: make sure there was one -d option and no -a options */
+ for (drv = drvs; drv; drv = drv->next) {
+ if (drv->type == drv_d)
+ count_d++;
+ else
+ count_other++;
+ }
+
+ if (count_d != 1) {
+ fprintf (stderr,
+ _("%s: with --live, you must use exactly one -d option\n"),
+ program_name);
+ exit (EXIT_FAILURE);
+ }
+
+ if (count_other != 0) {
+ fprintf (stderr,
+ _("%s: --live is not compatible with -a option\n"),
+ program_name);
+ exit (EXIT_FAILURE);
+ }
}
/* We'd better have a mountpoint. */