diff options
Diffstat (limited to 'pith/osdep/pipe.h')
-rw-r--r-- | pith/osdep/pipe.h | 117 |
1 files changed, 117 insertions, 0 deletions
diff --git a/pith/osdep/pipe.h b/pith/osdep/pipe.h new file mode 100644 index 00000000..589fc839 --- /dev/null +++ b/pith/osdep/pipe.h @@ -0,0 +1,117 @@ +/* + * $Id: pipe.h 769 2007-10-24 00:15:40Z hubert@u.washington.edu $ + * + * ======================================================================== + * Copyright 2006 University of Washington + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * ======================================================================== + */ + +#ifndef PITH_OSDEP_PIPE_INCLUDED +#define PITH_OSDEP_PIPE_INCLUDED + +/* Standard I/O File Descriptor Definitions */ +#ifndef STDIN_FILENO +#define STDIN_FILENO 0 +#endif +#ifndef STDOUT_FILENO +#define STDOUT_FILENO 1 +#endif +#ifndef STDERR_FILENO +#define STDERR_FILENO 2 +#endif + + +/* + * Flags for the pipe command routines... + */ +#define PIPE_WRITE 0x0001 /* set up pipe for reading */ +#define PIPE_READ 0x0002 /* set up pipe for reading */ +#define PIPE_NOSHELL 0x0004 /* don't exec in shell */ +#define PIPE_USER 0x0008 /* user mode */ +#define PIPE_STDERR 0x0010 /* stderr to child output */ +#define PIPE_PROT 0x0020 /* protected mode */ +#define PIPE_RESET 0x0040 /* reset terminal mode */ +#define PIPE_DESC 0x0080 /* no stdio desc wrapping */ +#define PIPE_SILENT 0x0100 /* no screen clear, etc */ +#define PIPE_RUNNOW 0x0200 /* don't wait for child (PC-Pine) */ +#define PIPE_RAW 0x0400 /* don't convert to locale */ +#define PIPE_NONEWMAIL 0x0800 /* don't call new_mail */ + +#ifdef _WINDOWS +/* + * Flags for mswin_exec_and_wait + */ +#define MSWIN_EAW_CAPT_STDERR 0x0001 +#define MSWIN_EAW_CTRL_C_CANCELS 0x0002 +#endif + + +/* + * Reaper flags + */ +#define PR_NONE 0x0000 +#ifdef WNOHANG +#define PR_NOHANG 0x0001 +#endif + +/* + * open_system_pipe callback so caller can insert code, typically interface + * stuff right before/after the fork and before/after wait + */ +#define OSB_PRE_OPEN 0x0001 +#define OSB_POST_OPEN 0x0002 +#define OSB_PRE_CLOSE 0x0004 +#define OSB_POST_CLOSE 0x0008 + +/* + * stucture required for the pipe commands... + */ +typedef struct pipe_s { + pid_t pid; /* child's process id */ + int mode, /* mode flags used to open */ + timeout, /* wait this long for child */ + old_timeo; /* previous active alarm */ + RETSIGTYPE (*hsig)(int), /* previously installed... */ + (*isig)(int), /* handlers */ + (*qsig)(int), + (*alrm)(int), + (*chld)(int); + union { + FILE *f; + int d; + } in; /* input data handle */ + union { + FILE *f; + int d; + } out; /* output data handle */ + char **argv, /* any necessary args */ + *args, + *tmp; /* pointer to stuff */ +#ifdef _WINDOWS + char *infile; /* file containing pipe's stdin */ + char *outfile; /* file containing pipe's stdout */ + char *command; /* command to execute */ + int exit_code; /* proc rv if run right away */ + int deloutfile; /* need to rm outfile at close */ +#endif +} PIPE_S; + + +/* + * Exported Prototypes + */ +PIPE_S *open_system_pipe(char *, char **, char **, int, int, + void (*)(PIPE_S *, int, void *), void (*)(char *)); +int close_system_pipe(PIPE_S **, int *, void (*)(PIPE_S *, int, void *)); +int pipe_close_write(PIPE_S *); +pid_t process_reap(pid_t, int *, int); + + +#endif /* PITH_OSDEP_PIPE_INCLUDED */ |