| /* |
| * Copyright 2001-2004 Brandon Long |
| * All Rights Reserved. |
| * |
| * ClearSilver Templating System |
| * |
| * This code is made available under the terms of the ClearSilver License. |
| * http://www.clearsilver.net/license.hdf |
| * |
| */ |
| |
| #ifndef __NEO_FILTER_H_ |
| #define __NEO_FILTER_H_ 1 |
| |
| __BEGIN_DECLS |
| |
| #include <stdarg.h> |
| #include <stdio.h> |
| #include "util/neo_misc.h" |
| #include "util/neo_err.h" |
| |
| /* |
| * Function: filter_wait - wrap waitpid to decode the exitcode and why |
| * your filter quit |
| * Description: filter_wait wraps the waitpid call and raises an error |
| * (with description) if the call failed. Note that if the |
| * ask for the exitcode and the process exited with a code |
| * other than zero, we don't raise an error. If you don't |
| * ask for the exitcode, and it is non-zero, we raise an |
| * error |
| * Input: pid -> the process identifier to wait for |
| * options -> the options to pass to waitpid (see wait(2)) |
| * Output: exitcode -> the exitcode if the process existed normally |
| * Returns: NERR_SYSTEM, NERR_ASSERT |
| */ |
| NEOERR *filter_wait(pid_t pid, int options, int *exitcode); |
| |
| /* |
| * Function: filter_create_fd - Create a sub process and return the |
| * requested pipes |
| * Description: filter_create_fd and filter_create_fp are what popen |
| * should have been: a mechanism to create sub processes |
| * and have pipes to all their input/output. The concept |
| * was taken from mutt, though python has something similar |
| * with popen3/popen4. You control which pipes the |
| * function returns by the fdin/fdout/fderr arguments. A |
| * NULL value means "don't create a pipe", a pointer to an |
| * int will cause the pipes to be created and the value |
| * of the file descriptor stored in the int. You will have |
| * to close(2) the file descriptors yourself. |
| * Input: cmd -> the sub command to execute. Will be executed with |
| * /bin/sh -c |
| * fdin -> pointer to return the stdin pipe, or NULL if you don't |
| * want the stdin pipe |
| * fdout -> pointer to return the stdout pipe, or NULL if you don't |
| * want the stdout pipe |
| * fderr -> pointer to return the stderr pipe, or NULL if you don't |
| * want the stderr pipe |
| * Output: fdin -> the stdin file descriptor of the sub process |
| * fdout -> the stdout file descriptor of the sub process |
| * fderr -> the stderr file descriptor of the sub process |
| * pid -> the pid of the sub process |
| * Returns: NERR_SYSTEM |
| */ |
| NEOERR *filter_create_fd(const char *cmd, int *fdin, int *fdout, int *fderr, |
| pid_t *pid); |
| |
| /* |
| * Function: filter_create_fp - similar to filter_create_fd except with |
| * buffered FILE* |
| * Description: filter_create_fp is identical to filter_create_fd, |
| * except each of the pipes is wrapped in a buffered stdio FILE |
| * Input: cmd -> the sub command to execute. Will be executed with |
| * /bin/sh -c |
| * in -> pointer to return the stdin pipe, or NULL if you don't |
| * want the stdin pipe |
| * out -> pointer to return the stdout pipe, or NULL if you don't |
| * want the stdout pipe |
| * err -> pointer to return the stderr pipe, or NULL if you don't |
| * want the stderr pipe |
| * Output: in -> the stdin FILE of the sub process |
| * out -> the stdout FILE of the sub process |
| * err -> the stderr FILE of the sub process |
| * pid -> the pid of the sub process |
| * Returns: NERR_SYSTEM, NERR_IO |
| */ |
| NEOERR *filter_create_fp(const char *cmd, FILE **in, FILE **out, FILE **err, |
| pid_t *pid); |
| |
| __END_DECLS |
| |
| #endif /* __NEO_FILTER_H_ */ |