git.annexia.org
/
libguestfs.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Update to-do list.
[libguestfs.git]
/
fish
/
fish.c
diff --git
a/fish/fish.c
b/fish/fish.c
index
18d3880
..
e66880f
100644
(file)
--- a/
fish/fish.c
+++ b/
fish/fish.c
@@
-45,6
+45,12
@@
struct mp {
char *mountpoint;
};
char *mountpoint;
};
+struct drv {
+ struct drv *next;
+ char *filename;
+};
+
+static void add_drives (struct drv *drv);
static void mount_mps (struct mp *mp);
static void interactive (void);
static void shell_script (void);
static void mount_mps (struct mp *mp);
static void interactive (void);
static void shell_script (void);
@@
-96,6
+102,7
@@
usage (void)
" -h|--cmd-help List available commands\n"
" -h|--cmd-help cmd Display detailed help on 'cmd'\n"
" -a|--add image Add image\n"
" -h|--cmd-help List available commands\n"
" -h|--cmd-help cmd Display detailed help on 'cmd'\n"
" -a|--add image Add image\n"
+ " -D|--no-dest-paths Don't tab-complete paths from guest fs\n"
" -m|--mount dev[:mnt] Mount dev on mnt (if omitted, /)\n"
" -n|--no-sync Don't autosync\n"
" -r|--ro Mount read-only\n"
" -m|--mount dev[:mnt] Mount dev on mnt (if omitted, /)\n"
" -n|--no-sync Don't autosync\n"
" -r|--ro Mount read-only\n"
@@
-113,12
+120,15
@@
main (int argc, char *argv[])
{ "cmd-help", 2, 0, 'h' },
{ "help", 0, 0, '?' },
{ "mount", 1, 0, 'm' },
{ "cmd-help", 2, 0, 'h' },
{ "help", 0, 0, '?' },
{ "mount", 1, 0, 'm' },
+ { "no-dest-paths", 0, 0, 'D' },
{ "no-sync", 0, 0, 'n' },
{ "ro", 0, 0, 'r' },
{ "verbose", 0, 0, 'v' },
{ "version", 0, 0, 'V' },
{ 0, 0, 0, 0 }
};
{ "no-sync", 0, 0, 'n' },
{ "ro", 0, 0, 'r' },
{ "verbose", 0, 0, 'v' },
{ "version", 0, 0, 'V' },
{ 0, 0, 0, 0 }
};
+ struct drv *drvs = NULL;
+ struct drv *drv;
struct mp *mps = NULL;
struct mp *mp;
char *p;
struct mp *mps = NULL;
struct mp *mp;
char *p;
@@
-160,8
+170,18
@@
main (int argc, char *argv[])
perror (optarg);
exit (1);
}
perror (optarg);
exit (1);
}
- if (guestfs_add_drive (g, optarg) == -1)
- exit (1);
+ drv = malloc (sizeof (struct drv));
+ if (!drv) {
+ perror ("malloc");
+ exit (1);
+ }
+ drv->filename = optarg;
+ drv->next = drvs;
+ drvs = drv;
+ break;
+
+ case 'D':
+ complete_dest_paths = 0;
break;
case 'h':
break;
case 'h':
@@
-218,6
+238,9
@@
main (int argc, char *argv[])
}
}
}
}
+ /* If we've got drives to add, add them now. */
+ add_drives (drvs);
+
/* If we've got mountpoints, we must launch the guest and mount them. */
if (mps != NULL) {
if (launch (g) == -1) exit (1);
/* If we've got mountpoints, we must launch the guest and mount them. */
if (mps != NULL) {
if (launch (g) == -1) exit (1);
@@
-277,6
+300,22
@@
mount_mps (struct mp *mp)
}
static void
}
static void
+add_drives (struct drv *drv)
+{
+ int r;
+
+ if (drv) {
+ add_drives (drv->next);
+ if (!read_only)
+ r = guestfs_add_drive (g, drv->filename);
+ else
+ r = guestfs_add_drive_ro (g, drv->filename);
+ if (r == -1)
+ exit (1);
+ }
+}
+
+static void
interactive (void)
{
script (1);
interactive (void)
{
script (1);
@@
-560,6
+599,8
@@
issue_command (const char *cmd, char *argv[])
strcasecmp (cmd, "vi") == 0 ||
strcasecmp (cmd, "emacs") == 0)
return do_edit (cmd, argc, 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);
}
else
return run_action (cmd, argc, argv);
}
@@
-579,6
+620,8
@@
list_builtin_commands (void)
"echo", _("display a line of text"));
printf ("%-20s %s\n",
"edit", _("edit a file in the image"));
"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) */
}
/* actions are printed after this (see list_commands) */
}
@@
-626,6
+669,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"));
"\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"
else if (strcasecmp (cmd, "help") == 0)
printf (_("help - display a list of commands or help on a command\n"
" help cmd\n"
@@
-650,6
+700,16
@@
free_strings (char **argv)
free (argv);
}
free (argv);
}
+int
+count_strings (char * const * const argv)
+{
+ int c;
+
+ for (c = 0; argv[c]; ++c)
+ ;
+ return c;
+}
+
void
print_strings (char * const * const argv)
{
void
print_strings (char * const * const argv)
{