inspect: Refuse to parse /etc/fstab if it is huge.
[libguestfs.git] / fish / more.c
index a32d5b4..2065abb 100644 (file)
 #include "fish.h"
 
 int
-do_more (const char *cmd, int argc, char *argv[])
+run_more (const char *cmd, size_t argc, char *argv[])
 {
-  char filename[] = "/tmp/guestfishXXXXXX";
+  TMP_TEMPLATE_ON_STACK (filename);
   char buf[256];
   const char *pager;
-  char *content;
   int r, fd;
 
   if (argc != 1) {
@@ -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);