diff options
author | axel <axel@liljencrantz.se> | 2005-10-08 21:20:51 +1000 |
---|---|---|
committer | axel <axel@liljencrantz.se> | 2005-10-08 21:20:51 +1000 |
commit | 9ae7fa5831cbc0a7d221c566bcd8633e609b9670 (patch) | |
tree | e58edf5437595dc50ff8595c23215f13efb190f9 /io.h | |
parent | 93eed7bc352d7c5f26097c70b3ee324c9f4947ca (diff) |
Move io redirection functions to their own library
darcs-hash:20051008112051-ac50b-113caa4cba470a739e4bfbed9f479e2fed357be7.gz
Diffstat (limited to 'io.h')
-rw-r--r-- | io.h | 87 |
1 files changed, 87 insertions, 0 deletions
@@ -0,0 +1,87 @@ +#ifndef FISH_IO_H +#define FISH_IO_H + +/** + Describes what type of IO operation an io_data_t represents +*/ +enum io_mode +{ + IO_FILE, IO_PIPE, IO_FD, IO_BUFFER, IO_CLOSE +} +; + +/** Represents an FD redirection */ +typedef struct io_data +{ + /** Type of redirect */ + int io_mode; + /** FD to redirect */ + int fd; + /** parameter for redirection */ + union + { + /** Fds for IO_PIPE and for IO_BUFFER */ + int pipe_fd[2]; + /** Filename IO_FILE */ + wchar_t *filename; + /** fd to redirect specified fd to, for IO_FD*/ + int old_fd; + } + ; + union + { + /** file creation flags to send to open for IO_FILE */ + int flags; + /** buffer to save output in for IO_BUFFER */ + buffer_t *out_buffer; + /** Whether to close old_fd for IO_FD */ + int close_old; + + } + ; + + /** Pointer to the next IO redirection */ + struct io_data *next; +} +io_data_t; + + +/** + Join two chains of io redirections +*/ +io_data_t *io_add( io_data_t *first_chain, io_data_t *decond_chain ); + +/** + Remove the specified io redirection from the chain +*/ +io_data_t *io_remove( io_data_t *list, io_data_t *element ); + +/** + Make a copy of the specified chain of redirections +*/ +io_data_t *io_duplicate( io_data_t *l ); + +/** + Return the last io redirection in ht e chain for the specified file descriptor. +*/ +io_data_t *io_get( io_data_t *io, int fd ); + + + +/** + Free all resources used by a IO_BUFFER type io redirection. +*/ +void io_buffer_destroy( io_data_t *io_buffer ); + +/** + Create a IO_BUFFER type io redirection, complete with a pipe and a + buffer_t for output. +*/ +io_data_t *io_buffer_create(); + +/** + Close output pipe, and read from input pipe until eof. +*/ +void io_buffer_read( io_data_t *d ); + +#endif |