aboutsummaryrefslogtreecommitdiffhomepage
path: root/env_universal_common.cpp
diff options
context:
space:
mode:
authorGravatar ridiculousfish <corydoras@ridiculousfish.com>2013-02-16 01:28:46 -0800
committerGravatar ridiculousfish <corydoras@ridiculousfish.com>2013-02-16 01:28:46 -0800
commitdc54ec5b2b4391791b4b7f3471b6031c492d26f1 (patch)
tree6b164d9fdb78ecdf970213896478cf3072fab576 /env_universal_common.cpp
parentb682c4102e31257f96094617275d451c1b0de855 (diff)
Migrate connection_t from storing a huge buffer to a std::vector
Diffstat (limited to 'env_universal_common.cpp')
-rw-r--r--env_universal_common.cpp24
1 files changed, 13 insertions, 11 deletions
diff --git a/env_universal_common.cpp b/env_universal_common.cpp
index 5f1c1eaa..6887f8cf 100644
--- a/env_universal_common.cpp
+++ b/env_universal_common.cpp
@@ -422,10 +422,11 @@ void env_universal_common_init(void (*cb)(fish_message_type_t type, const wchar_
static int read_byte(connection_t *src)
{
- if (src->buffer_consumed >= src->buffer_used)
+ if (src->buffer_consumed >= src->read_buffer.size())
{
-
- ssize_t res = read(src->fd, src->buffer, ENV_UNIVERSAL_BUFFER_SIZE);
+ char local[ENV_UNIVERSAL_BUFFER_SIZE];
+
+ ssize_t res = read(src->fd, local, sizeof local);
// debug(4, L"Read chunk '%.*s'", res, src->buffer );
@@ -441,17 +442,19 @@ static int read_byte(connection_t *src)
return ENV_UNIVERSAL_ERROR;
}
-
- if (res == 0)
+ else if (res == 0)
{
return ENV_UNIVERSAL_EOF;
}
-
- src->buffer_consumed = 0;
- src->buffer_used = res;
+ else
+ {
+ src->read_buffer.clear();
+ src->read_buffer.insert(src->read_buffer.begin(), local, local + res);
+ src->buffer_consumed = 0;
+ }
}
- return src->buffer[src->buffer_consumed++];
+ return src->read_buffer.at(src->buffer_consumed++);
}
@@ -934,8 +937,7 @@ void enqueue_all(connection_t *c)
connection_t::connection_t(int input_fd) :
fd(input_fd),
killme(false),
- buffer_consumed(0),
- buffer_used(0)
+ buffer_consumed(0)
{
}