Convert io_buffer_read to io_buffer_t::read

This commit is contained in:
Cheer Xiao 2013-01-15 17:10:40 +08:00
parent df0c1eb32c
commit e020ad0c06
4 changed files with 17 additions and 17 deletions

View file

@ -1008,7 +1008,7 @@ void exec(parser_t &parser, job_t *j)
io_remove(j->io, io_buffer); io_remove(j->io, io_buffer);
io_buffer_read(io_buffer.get()); io_buffer->read();
const char *buffer = io_buffer->out_buffer_ptr(); const char *buffer = io_buffer->out_buffer_ptr();
size_t count = io_buffer->out_buffer_size(); size_t count = io_buffer->out_buffer_size();
@ -1423,7 +1423,7 @@ static int exec_subshell_internal(const wcstring &cmd, wcstring_list_t *lst)
status = proc_get_last_status(); status = proc_get_last_status();
} }
io_buffer_read(io_buffer.get()); io_buffer->read();
proc_set_last_status(prev_status); proc_set_last_status(prev_status);

18
io.cpp
View file

@ -81,23 +81,23 @@ void io_buffer_t::print() const
fprintf(stderr, "buffer %p (size %lu)\n", out_buffer_ptr(), out_buffer_size()); fprintf(stderr, "buffer %p (size %lu)\n", out_buffer_ptr(), out_buffer_size());
} }
void io_buffer_read(io_buffer_t *d) void io_buffer_t::read()
{ {
exec_close(d->param1.pipe_fd[1]); exec_close(param1.pipe_fd[1]);
if (d->io_mode == IO_BUFFER) if (io_mode == IO_BUFFER)
{ {
/* if( fcntl( d->param1.pipe_fd[0], F_SETFL, 0 ) ) /* if( fcntl( param1.pipe_fd[0], F_SETFL, 0 ) )
{ {
wperror( L"fcntl" ); wperror( L"fcntl" );
return; return;
} */ } */
debug(4, L"io_buffer_read: blocking read on fd %d", d->param1.pipe_fd[0]); debug(4, L"io_buffer_t::read: blocking read on fd %d", param1.pipe_fd[0]);
while (1) while (1)
{ {
char b[4096]; char b[4096];
long l; long l;
l=read_blocked(d->param1.pipe_fd[0], b, 4096); l=read_blocked(param1.pipe_fd[0], b, 4096);
if (l==0) if (l==0)
{ {
break; break;
@ -115,15 +115,15 @@ void io_buffer_read(io_buffer_t *d)
{ {
debug(1, debug(1,
_(L"An error occured while reading output from code block on file descriptor %d"), _(L"An error occured while reading output from code block on file descriptor %d"),
d->param1.pipe_fd[0]); param1.pipe_fd[0]);
wperror(L"io_buffer_read"); wperror(L"io_buffer_t::read");
} }
break; break;
} }
else else
{ {
d->out_buffer_append(b, l); out_buffer_append(b, l);
} }
} }
} }

10
io.h
View file

@ -163,6 +163,11 @@ public:
return out_buffer->size(); return out_buffer->size();
} }
/**
Close output pipe, and read from input pipe until eof.
*/
void read();
/** /**
Create a IO_BUFFER type io redirection, complete with a pipe and a Create a IO_BUFFER type io redirection, complete with a pipe and a
vector<char> for output. The default file descriptor used is 1 for vector<char> for output. The default file descriptor used is 1 for
@ -212,11 +217,6 @@ shared_ptr<const io_data_t> io_chain_get(const io_chain_t &src, int fd);
shared_ptr<io_data_t> io_chain_get(io_chain_t &src, int fd); shared_ptr<io_data_t> io_chain_get(io_chain_t &src, int fd);
/**
Close output pipe, and read from input pipe until eof.
*/
void io_buffer_read(io_buffer_t *d);
/** Print debug information about the specified IO redirection chain to stderr. */ /** Print debug information about the specified IO redirection chain to stderr. */
void io_print(const io_chain_t &chain); void io_print(const io_chain_t &chain);

View file

@ -1143,7 +1143,7 @@ static void run_pager(const wcstring &prefix, int is_quoted, const std::vector<c
parser.eval(cmd, io_chain, TOP); parser.eval(cmd, io_chain, TOP);
term_steal(); term_steal();
io_buffer_read(out.get()); out->read();
int nil=0; int nil=0;
out->out_buffer_append((char *)&nil, 1); out->out_buffer_append((char *)&nil, 1);