Make io_buffer_t::out_buffer a raw pointer, initialize in io_buffer_t's constructor

This commit is contained in:
Cheer Xiao 2013-01-16 11:27:50 +08:00
parent 9808829ece
commit a63c0311bb
2 changed files with 3 additions and 13 deletions

2
io.cpp
View File

@ -133,7 +133,6 @@ io_buffer_t *io_buffer_t::create(bool is_input)
{ {
bool success = true; bool success = true;
io_buffer_t *buffer_redirect = new io_buffer_t(is_input ? 0 : 1); io_buffer_t *buffer_redirect = new io_buffer_t(is_input ? 0 : 1);
buffer_redirect->out_buffer_create();
buffer_redirect->is_input = is_input ? true : false; buffer_redirect->is_input = is_input ? true : false;
if (exec_pipe(buffer_redirect->pipe_fd) == -1) if (exec_pipe(buffer_redirect->pipe_fd) == -1)
@ -163,6 +162,7 @@ io_buffer_t *io_buffer_t::create(bool is_input)
io_buffer_t::~io_buffer_t() io_buffer_t::~io_buffer_t()
{ {
delete out_buffer;
/** /**
If this is an input buffer, then io_read_buffer will not have If this is an input buffer, then io_read_buffer will not have
been called, and we need to close the output fd as well. been called, and we need to close the output fd as well.

14
io.h
View File

@ -120,11 +120,11 @@ class io_buffer_t : public io_pipe_t
{ {
private: private:
/** buffer to save output in */ /** buffer to save output in */
shared_ptr<std::vector<char> > out_buffer; std::vector<char> *out_buffer;
io_buffer_t(int f): io_buffer_t(int f):
io_pipe_t(f), io_pipe_t(f),
out_buffer() out_buffer(new std::vector<char>)
{ {
io_mode = IO_BUFFER; io_mode = IO_BUFFER;
} }
@ -134,36 +134,26 @@ public:
virtual ~io_buffer_t(); virtual ~io_buffer_t();
/** Function to create the output buffer */
void out_buffer_create()
{
out_buffer.reset(new std::vector<char>);
}
/** Function to append to the buffer */ /** Function to append to the buffer */
void out_buffer_append(const char *ptr, size_t count) void out_buffer_append(const char *ptr, size_t count)
{ {
assert(out_buffer.get() != NULL);
out_buffer->insert(out_buffer->end(), ptr, ptr + count); out_buffer->insert(out_buffer->end(), ptr, ptr + count);
} }
/** Function to get a pointer to the buffer */ /** Function to get a pointer to the buffer */
char *out_buffer_ptr(void) char *out_buffer_ptr(void)
{ {
assert(out_buffer.get() != NULL);
return out_buffer->empty() ? NULL : &out_buffer->at(0); return out_buffer->empty() ? NULL : &out_buffer->at(0);
} }
const char *out_buffer_ptr(void) const const char *out_buffer_ptr(void) const
{ {
assert(out_buffer.get() != NULL);
return out_buffer->empty() ? NULL : &out_buffer->at(0); return out_buffer->empty() ? NULL : &out_buffer->at(0);
} }
/** Function to get the size of the buffer */ /** Function to get the size of the buffer */
size_t out_buffer_size(void) const size_t out_buffer_size(void) const
{ {
assert(out_buffer.get() != NULL);
return out_buffer->size(); return out_buffer->size();
} }