* 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"
if (in) {
*in = 0;
if (pipe (pin) == -1)
- return (-1);
+ return -1;
}
if (out) {
close (pin[0]);
close (pin[1]);
}
- return (-1);
+ return -1;
}
}
close (pout[0]);
close (pout[1]);
}
- return (-1);
+ return -1;
}
}
close (perr[1]);
}
- return (-1);
+ return -1;
}
if (out) {
*err = fdopen (perr[0], "r");
}
- return (thepid);
+ return thepid;
}
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)
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;
+}
+