New way to connect a job_t.
[apps/madmutt.git] / lib-sys / filter.c
index 193b2ad..f2d6086 100644 (file)
@@ -7,14 +7,8 @@
  * please see the file GPL in the top level source directory.
  */
 
  * please see the file GPL in the top level source directory.
  */
 
-#if HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include <unistd.h>
-#include <stdlib.h>
-#include <sys/wait.h>
-#include <stdio.h>
+#include <lib-lib/lib-lib.h>
+#include <lib-ui/lib-ui.h>
 
 #include "mutt_signal.h"
 #include "unix.h"
 
 #include "mutt_signal.h"
 #include "unix.h"
@@ -31,7 +25,7 @@ mutt_create_filter_fd (const char *cmd, FILE ** in, FILE ** out, FILE ** err,
   if (in) {
     *in = 0;
     if (pipe (pin) == -1)
   if (in) {
     *in = 0;
     if (pipe (pin) == -1)
-      return (-1);
+      return -1;
   }
 
   if (out) {
   }
 
   if (out) {
@@ -41,7 +35,7 @@ mutt_create_filter_fd (const char *cmd, FILE ** in, FILE ** out, FILE ** err,
         close (pin[0]);
         close (pin[1]);
       }
         close (pin[0]);
         close (pin[1]);
       }
-      return (-1);
+      return -1;
     }
   }
 
     }
   }
 
@@ -56,7 +50,7 @@ mutt_create_filter_fd (const char *cmd, FILE ** in, FILE ** out, FILE ** err,
         close (pout[0]);
         close (pout[1]);
       }
         close (pout[0]);
         close (pout[1]);
       }
-      return (-1);
+      return -1;
     }
   }
 
     }
   }
 
@@ -116,7 +110,7 @@ mutt_create_filter_fd (const char *cmd, FILE ** in, FILE ** out, FILE ** err,
       close (perr[1]);
     }
 
       close (perr[1]);
     }
 
-    return (-1);
+    return -1;
   }
 
   if (out) {
   }
 
   if (out) {
@@ -134,12 +128,12 @@ mutt_create_filter_fd (const char *cmd, FILE ** in, FILE ** out, FILE ** err,
     *err = fdopen (perr[0], "r");
   }
 
     *err = fdopen (perr[0], "r");
   }
 
-  return (thepid);
+  return thepid;
 }
 
 pid_t mutt_create_filter (const char *s, FILE ** in, FILE ** out, FILE ** err)
 {
 }
 
 pid_t mutt_create_filter (const char *s, FILE ** in, FILE ** out, FILE ** err)
 {
-  return (mutt_create_filter_fd (s, in, out, err, -1, -1, -1));
+  return mutt_create_filter_fd (s, in, out, err, -1, -1, -1);
 }
 
 int mutt_wait_filter (pid_t pid)
 }
 
 int mutt_wait_filter (pid_t pid)
@@ -152,3 +146,31 @@ int mutt_wait_filter (pid_t pid)
 
   return rc;
 }
 
   return rc;
 }
+
+/* This function allows the user to specify a command to read stdout from in
+   place of a normal file.  If the last character in the string is a pipe (|),
+   then we assume it is a commmand to run instead of a normal file. */
+FILE *mutt_open_read (const char *path, pid_t * thepid)
+{
+    int len = m_strlen(path);
+    FILE *f;
+
+    if (path[len - 1] == '|') {
+        char *s = m_strdup(path);
+
+        /* read from a pipe */
+
+        s[len - 1] = 0;
+        mutt_endwin (NULL);
+        *thepid = mutt_create_filter (s, NULL, &f, NULL);
+        p_delete(&s);
+    } else {
+        f = fopen (path, "r");
+        if (!f)
+            return NULL;
+        *thepid = -1;
+    }
+
+    return f;
+}
+