summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRichard Jones <rjones@redhat.com>2009-06-08 10:01:42 +0100
committerRichard Jones <rjones@redhat.com>2009-06-08 10:01:42 +0100
commitfa8cb5dac284bf463677380e5ef55370f447d870 (patch)
tree0d04360c7897b75a0cc50b34b9ea43c19f935c37
parent85d7e275b5460df6f075a6931cbaed7d0a0dcb7c (diff)
downloadlibguestfs-fa8cb5dac284bf463677380e5ef55370f447d870.tar.gz
libguestfs-fa8cb5dac284bf463677380e5ef55370f447d870.tar.xz
libguestfs-fa8cb5dac284bf463677380e5ef55370f447d870.zip
Added 'lcd' command to guestfish.
-rw-r--r--fish/Makefile.am4
-rw-r--r--fish/fish.c11
-rw-r--r--fish/fish.h6
-rw-r--r--fish/lcd.c44
4 files changed, 63 insertions, 2 deletions
diff --git a/fish/Makefile.am b/fish/Makefile.am
index b3782eca..5f888946 100644
--- a/fish/Makefile.am
+++ b/fish/Makefile.am
@@ -24,7 +24,9 @@ guestfish_SOURCES = \
echo.c \
edit.c \
fish.c \
- fish.h
+ fish.h \
+ lcd.c
+
guestfish_CFLAGS = \
-I$(top_builddir)/src -Wall \
-DGUESTFS_DEFAULT_PATH='"$(libdir)/guestfs"'
diff --git a/fish/fish.c b/fish/fish.c
index 96c1a816..da2d6d21 100644
--- a/fish/fish.c
+++ b/fish/fish.c
@@ -593,6 +593,8 @@ issue_command (const char *cmd, char *argv[])
strcasecmp (cmd, "vi") == 0 ||
strcasecmp (cmd, "emacs") == 0)
return do_edit (cmd, argc, argv);
+ else if (strcasecmp (cmd, "lcd") == 0)
+ return do_lcd (cmd, argc, argv);
else
return run_action (cmd, argc, argv);
}
@@ -612,6 +614,8 @@ list_builtin_commands (void)
"echo", _("display a line of text"));
printf ("%-20s %s\n",
"edit", _("edit a file in the image"));
+ printf ("%-20s %s\n",
+ "lcd", _("local change directory"));
/* actions are printed after this (see list_commands) */
}
@@ -659,6 +663,13 @@ display_builtin_command (const char *cmd)
"\n"
" NOTE: This will not work reliably for large files\n"
" (> 2 MB) or binary files containing \\0 bytes.\n"));
+ else if (strcasecmp (cmd, "lcd") == 0)
+ printf (_("lcd - local change directory\n"
+ " lcd <directory>\n"
+ "\n"
+ " Change guestfish's current directory. This command is\n"
+ " useful if you want to download files to a particular\n"
+ " place.\n"));
else if (strcasecmp (cmd, "help") == 0)
printf (_("help - display a list of commands or help on a command\n"
" help cmd\n"
diff --git a/fish/fish.h b/fish/fish.h
index 13a2e5c4..0dd1fc2e 100644
--- a/fish/fish.h
+++ b/fish/fish.h
@@ -61,6 +61,9 @@ extern int do_echo (const char *cmd, int argc, char *argv[]);
/* in edit.c */
extern int do_edit (const char *cmd, int argc, char *argv[]);
+/* in lcd.c */
+extern int do_lcd (const char *cmd, int argc, char *argv[]);
+
/* This should just list all the built-in commands so they can
* be added to the generated auto-completion code.
*/
@@ -69,6 +72,7 @@ extern int do_edit (const char *cmd, int argc, char *argv[]);
"quit", "exit", "q", \
"alloc", "allocate", \
"echo", \
- "edit", "vi", "emacs"
+ "edit", "vi", "emacs" \
+ "lcd"
#endif /* FISH_H */
diff --git a/fish/lcd.c b/fish/lcd.c
new file mode 100644
index 00000000..359d178e
--- /dev/null
+++ b/fish/lcd.c
@@ -0,0 +1,44 @@
+/* guestfish - the filesystem interactive shell
+ * Copyright (C) 2009 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include <config.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+#include "fish.h"
+
+/* guestfish lcd command (similar to the lcd command in BSD ftp) */
+
+int
+do_lcd (const char *cmd, int argc, char *argv[])
+{
+ if (argc != 1) {
+ fprintf (stderr, _("use 'lcd directory' to change local directory\n"));
+ return -1;
+ }
+
+ if (chdir (argv[0]) == -1) {
+ perror (argv[0]);
+ return -1;
+ }
+
+ return 0;
+}