fish: Fix 'more' command to work with any file.
[libguestfs.git] / fish / more.c
index 9abb51b..55faefa 100644 (file)
@@ -33,7 +33,6 @@ do_more (const char *cmd, int argc, char *argv[])
   char filename[] = "/tmp/guestfishXXXXXX";
   char buf[256];
   const char *pager;
-  char *content;
   int r, fd;
 
   if (argc != 1) {
@@ -42,7 +41,7 @@ do_more (const char *cmd, int argc, char *argv[])
   }
 
   /* Choose a pager. */
-  if (strcasecmp (cmd, "less") == 0)
+  if (STRCASEEQ (cmd, "less"))
     pager = "less";
   else {
     pager = getenv ("PAGER");
@@ -57,21 +56,14 @@ do_more (const char *cmd, int argc, char *argv[])
     return -1;
   }
 
-  if ((content = guestfs_cat (g, argv[0])) == NULL) {
-    close (fd);
-    unlink (filename);
-    return -1;
-  }
+  snprintf (buf, sizeof buf, "/dev/fd/%d", fd);
 
-  if (xwrite (fd, content, strlen (content)) == -1) {
+  if (guestfs_download (g, argv[0], buf) == -1) {
     close (fd);
     unlink (filename);
-    free (content);
     return -1;
   }
 
-  free (content);
-
   if (close (fd) == -1) {
     perror (filename);
     unlink (filename);