diff --git a/io.cpp b/io.cpp index 241f89d91..dfda6e55a 100644 --- a/io.cpp +++ b/io.cpp @@ -135,6 +135,7 @@ io_buffer_t *io_buffer_t::create(bool is_input) { bool success = true; io_buffer_t *buffer_redirect = new io_buffer_t(is_input ? 0 : 1, is_input); + buffer_redirect->out_buffer_create(); if (exec_pipe(buffer_redirect->pipe_fd) == -1) { @@ -163,7 +164,6 @@ io_buffer_t *io_buffer_t::create(bool is_input) io_buffer_t::~io_buffer_t() { - delete out_buffer; /** 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. diff --git a/io.h b/io.h index c463836b2..bfe910e33 100644 --- a/io.h +++ b/io.h @@ -125,11 +125,11 @@ class io_buffer_t : public io_pipe_t { private: /** buffer to save output in */ - std::vector *out_buffer; + shared_ptr > out_buffer; io_buffer_t(int f, bool i): io_pipe_t(IO_BUFFER, f, i), - out_buffer(new std::vector) + out_buffer() { } @@ -138,26 +138,36 @@ public: virtual ~io_buffer_t(); + /** Function to create the output buffer */ + void out_buffer_create() + { + out_buffer.reset(new std::vector); + } + /** Function to append to the buffer */ void out_buffer_append(const char *ptr, size_t count) { + assert(out_buffer.get() != NULL); out_buffer->insert(out_buffer->end(), ptr, ptr + count); } /** Function to get a pointer to the buffer */ char *out_buffer_ptr(void) { + assert(out_buffer.get() != NULL); 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 */ size_t out_buffer_size(void) const { + assert(out_buffer.get() != NULL); return out_buffer->size(); }