fish: copy-in, copy-out, edit, more commands can use win:... prefix.
[libguestfs.git] / fish / more.c
index 2065abb..01443ff 100644 (file)
@@ -1,5 +1,5 @@
 /* guestfish - the filesystem interactive shell
- * Copyright (C) 2009 Red Hat Inc.
+ * Copyright (C) 2009-2011 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
@@ -32,6 +32,7 @@ run_more (const char *cmd, size_t argc, char *argv[])
 {
   TMP_TEMPLATE_ON_STACK (filename);
   char buf[256];
+  char *remote;
   const char *pager;
   int r, fd;
 
@@ -49,24 +50,34 @@ run_more (const char *cmd, size_t argc, char *argv[])
       pager = "more";
   }
 
+  remote = argv[0];
+
+  /* Allow win:... prefix on remote. */
+  remote = win_prefix (remote);
+  if (remote == NULL)
+    return -1;
+
   /* Download the file and write it to a temporary. */
   fd = mkstemp (filename);
   if (fd == -1) {
     perror ("mkstemp");
+    free (remote);
     return -1;
   }
 
   snprintf (buf, sizeof buf, "/dev/fd/%d", fd);
 
-  if (guestfs_download (g, argv[0], buf) == -1) {
+  if (guestfs_download (g, remote, buf) == -1) {
     close (fd);
     unlink (filename);
+    free (remote);
     return -1;
   }
 
   if (close (fd) == -1) {
     perror (filename);
     unlink (filename);
+    free (remote);
     return -1;
   }
 
@@ -78,8 +89,10 @@ run_more (const char *cmd, size_t argc, char *argv[])
   unlink (filename);
   if (r != 0) {
     perror (buf);
+    free (remote);
     return -1;
   }
 
+  free (remote);
   return 0;
 }