#include <assert.h>
#include <sys/types.h>
#include <sys/wait.h>
+#include <locale.h>
#ifdef HAVE_LIBREADLINE
#include <readline/readline.h>
int remote_control_listen = 0;
int remote_control = 0;
int exit_on_error = 1;
+int command_num = 0;
int
launch (guestfs_h *_g)
atexit (close_stdout);
+ setlocale (LC_ALL, "");
+ bindtextdomain (PACKAGE, LOCALEBASEDIR);
+ textdomain (PACKAGE);
+
enum { HELP_OPTION = CHAR_MAX + 1 };
static const char *options = "a:Df:h::im:nrv?Vx";
break;
case HELP_OPTION:
- usage (0);
+ usage (EXIT_SUCCESS);
default:
- usage (1);
+ usage (EXIT_FAILURE);
}
}
if (mp) {
mount_mps (mp->next);
- if (!read_only)
- r = guestfs_mount (g, mp->device, mp->mountpoint);
- else
- r = guestfs_mount_ro (g, mp->device, mp->mountpoint);
+
+ /* Don't use guestfs_mount here because that will default to mount
+ * options -o sync,noatime. For more information, see guestfs(3)
+ * section "LIBGUESTFS GOTCHAS".
+ */
+ const char *options = read_only ? "ro" : "";
+ r = guestfs_mount_options (g, options, mp->device, mp->mountpoint);
if (r == -1)
exit (EXIT_FAILURE);
}
int pid = 0;
int i, r;
+ /* This counts the commands issued, starting at 1. */
+ command_num++;
+
if (echo_commands) {
printf ("%s", cmd);
for (i = 0; argv[i] != NULL; ++i)
cmd);
}
+/* This is printed when the user types in an unknown command for the
+ * first command issued. A common case is the user doing:
+ * guestfish disk.img
+ * expecting guestfish to open 'disk.img' (in fact, this tried to
+ * run a command 'disk.img').
+ */
+void
+extended_help_message (void)
+{
+ fprintf (stderr,
+ _("Did you mean to open a disk image? guestfish -a disk.img\n"
+ "For a list of commands: guestfish -h\n"
+ "For complete documentation: man guestfish\n"));
+}
+
void
free_strings (char **argv)
{
}
close (fd);
+#ifdef HAVE_APPEND_HISTORY
(void) append_history (nr_history_lines, histfile);
+#else
+ (void) write_history (histfile);
+#endif
}
#endif
}