X-Git-Url: http://git.annexia.org/?a=blobdiff_plain;f=fish%2Ffish.c;h=da2d6d21ebc6a9dc06b40167fca56ec86693a4e5;hb=71322ebf4ee7dfb53db344aaedd70518a3c7a552;hp=18d3880d405ef9bbbd10baceee12eee775da7ee1;hpb=a1e8cdf2a254c5eddaf525cd7c34e4c937690204;p=libguestfs.git diff --git a/fish/fish.c b/fish/fish.c index 18d3880..da2d6d2 100644 --- a/fish/fish.c +++ b/fish/fish.c @@ -45,6 +45,12 @@ struct mp { 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); @@ -119,6 +125,8 @@ main (int argc, char *argv[]) { "version", 0, 0, 'V' }, { 0, 0, 0, 0 } }; + struct drv *drvs = NULL; + struct drv *drv; struct mp *mps = NULL; struct mp *mp; char *p; @@ -160,8 +168,14 @@ main (int argc, char *argv[]) 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 'h': @@ -218,6 +232,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); @@ -277,6 +294,22 @@ mount_mps (struct mp *mp) } 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); @@ -560,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); } @@ -579,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) */ } @@ -626,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 \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"