aboutsummaryrefslogtreecommitdiffhomepage
path: root/io.h
diff options
context:
space:
mode:
authorGravatar axel <axel@liljencrantz.se>2005-10-08 21:20:51 +1000
committerGravatar axel <axel@liljencrantz.se>2005-10-08 21:20:51 +1000
commit9ae7fa5831cbc0a7d221c566bcd8633e609b9670 (patch)
treee58edf5437595dc50ff8595c23215f13efb190f9 /io.h
parent93eed7bc352d7c5f26097c70b3ee324c9f4947ca (diff)
Move io redirection functions to their own library
darcs-hash:20051008112051-ac50b-113caa4cba470a739e4bfbed9f479e2fed357be7.gz
Diffstat (limited to 'io.h')
-rw-r--r--io.h87
1 files changed, 87 insertions, 0 deletions
diff --git a/io.h b/io.h
new file mode 100644
index 00000000..6cb103be
--- /dev/null
+++ b/io.h
@@ -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