mirror of
https://github.com/fish-shell/fish-shell.git
synced 2026-06-02 22:21:15 -03:00
Adopt posix_spawn (!)
Rewrite IO chains to be a vector of pointers, instead of a linked list Removed io_transmogrify
This commit is contained in:
68
io.h
68
io.h
@@ -73,7 +73,12 @@ class io_data_t
|
||||
/** Function to get a pointer to the buffer */
|
||||
char *out_buffer_ptr(void) {
|
||||
assert(out_buffer.get() != NULL);
|
||||
return (out_buffer->size() == 0) ? NULL : &out_buffer->at(0);
|
||||
return out_buffer->empty() ? NULL : &out_buffer->at(0);
|
||||
}
|
||||
|
||||
const char *out_buffer_ptr(void) const {
|
||||
assert(out_buffer.get() != NULL);
|
||||
return out_buffer->empty() ? NULL : &out_buffer->at(0);
|
||||
}
|
||||
|
||||
/** Function to get the size of the buffer */
|
||||
@@ -83,11 +88,8 @@ class io_data_t
|
||||
}
|
||||
|
||||
/** Set to true if this is an input io redirection */
|
||||
int is_input;
|
||||
bool is_input;
|
||||
|
||||
/** Pointer to the next IO redirection */
|
||||
io_data_t *next;
|
||||
|
||||
io_data_t() :
|
||||
out_buffer(),
|
||||
io_mode(0),
|
||||
@@ -95,8 +97,7 @@ class io_data_t
|
||||
param1(),
|
||||
param2(),
|
||||
filename_cstr(NULL),
|
||||
is_input(0),
|
||||
next(NULL)
|
||||
is_input(0)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -107,10 +108,8 @@ class io_data_t
|
||||
param1(rhs.param1),
|
||||
param2(rhs.param2),
|
||||
filename_cstr(rhs.filename_cstr ? strdup(rhs.filename_cstr) : NULL),
|
||||
is_input(rhs.is_input),
|
||||
next(rhs.next)
|
||||
is_input(rhs.is_input)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
~io_data_t() {
|
||||
@@ -118,27 +117,44 @@ class io_data_t
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
Join two chains of io redirections
|
||||
*/
|
||||
io_data_t *io_add( io_data_t *first_chain, io_data_t *decond_chain );
|
||||
class io_chain_t : public std::vector<io_data_t *> {
|
||||
public:
|
||||
io_chain_t();
|
||||
io_chain_t(io_data_t *);
|
||||
|
||||
void remove(const io_data_t *element);
|
||||
io_chain_t duplicate() const;
|
||||
void duplicate_append(const io_chain_t &src);
|
||||
void destroy();
|
||||
|
||||
const io_data_t *get_io_for_fd(int fd) const;
|
||||
io_data_t *get_io_for_fd(int fd);
|
||||
|
||||
|
||||
};
|
||||
|
||||
/**
|
||||
Remove the specified io redirection from the chain
|
||||
*/
|
||||
io_data_t *io_remove( io_data_t *list, io_data_t *element );
|
||||
void io_remove(io_chain_t &list, const io_data_t *element);
|
||||
|
||||
/**
|
||||
Make a copy of the specified chain of redirections. Uses operator new.
|
||||
*/
|
||||
io_data_t *io_duplicate( io_data_t *l );
|
||||
/** Make a copy of the specified chain of redirections. Uses operator new. */
|
||||
io_chain_t io_duplicate(const io_chain_t &chain);
|
||||
|
||||
/** Return a shallow copy of the specified chain of redirections that contains only the applicable redirections. That is, if there's multiple redirections for the same fd, only the second one is included. */
|
||||
io_chain_t io_unique(const io_chain_t &chain);
|
||||
|
||||
/** Appends a copy of the specified 'src' chain of redirections to 'dst.' Uses operator new. */
|
||||
void io_duplicate_append( const io_chain_t &src, io_chain_t &dst );
|
||||
|
||||
/** Destroys an io_chain */
|
||||
void io_chain_destroy(io_chain_t &chain);
|
||||
|
||||
/**
|
||||
Return the last io redirection in the chain for the specified file descriptor.
|
||||
*/
|
||||
io_data_t *io_get( io_data_t *io, int fd );
|
||||
|
||||
const io_data_t *io_chain_get(const io_chain_t &src, int fd);
|
||||
io_data_t *io_chain_get(io_chain_t &src, int fd);
|
||||
|
||||
|
||||
/**
|
||||
@@ -155,16 +171,14 @@ void io_buffer_destroy( io_data_t *io_buffer );
|
||||
used to buffer the output of a command, or non-zero to buffer the
|
||||
input to a command.
|
||||
*/
|
||||
io_data_t *io_buffer_create( int is_input );
|
||||
io_data_t *io_buffer_create( bool is_input );
|
||||
|
||||
/**
|
||||
Close output pipe, and read from input pipe until eof.
|
||||
*/
|
||||
void io_buffer_read( io_data_t *d );
|
||||
|
||||
/**
|
||||
Print debug information about the specified IO redirection chain to stderr.
|
||||
*/
|
||||
void io_print( io_data_t *io );
|
||||
/** Print debug information about the specified IO redirection chain to stderr. */
|
||||
void io_print( const io_chain_t &chain );
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user