diff options
-rw-r--r-- | buffer.c | 20 | ||||
-rw-r--r-- | buffer.h | 2 | ||||
-rw-r--r-- | stream.c | 7 |
3 files changed, 19 insertions, 10 deletions
@@ -9,26 +9,25 @@ #include "stream.h" -void buffer_grow(lua_State * L, struct buffer * b) +int buffer_grow(struct buffer * b) { int allocated = b->allocated + 1024; if (8192 < allocated) { - lua_pushliteral(L, "Too large buffer"); - lua_error(L); + errno = ENOMEM; + return -1; } void * buffer = realloc(b->data, allocated); if (NULL == buffer) - { - lua_pushliteral(L, "Could not grow buffer"); - lua_error(L); - } + return -1; b->data = buffer; b->allocated = allocated; + + return allocated; } int buffer_read_more(lua_State * L, int fd, struct buffer * in, int minimum_length, lua_KContext ctx) @@ -37,7 +36,12 @@ int buffer_read_more(lua_State * L, int fd, struct buffer * in, int minimum_leng while (free_space < minimum_length) { - buffer_grow(L, in); + const int res = buffer_grow(in); + if (-1 == res) + { + lua_pushstring(L, strerror(errno)); + return lua_error(L); + } } if (0 < in->offset) @@ -11,7 +11,7 @@ struct buffer int allocated; }; -void buffer_grow(lua_State *, struct buffer *); +int buffer_grow(struct buffer *); int buffer_read_more(lua_State *, const int, struct buffer *, const int, lua_KContext); int buffer_prepare_at_least(lua_State *, const int, struct buffer *, const int, lua_KContext); int buffer_until(struct buffer *, const char *, const int); @@ -225,7 +225,12 @@ int stream_write(lua_State * L) while (free_space < (int) data_length) { - buffer_grow(L, &s->out); + const int res = buffer_grow(&s->out); + if (-1 == res) + { + lua_pushstring(L, strerror(errno)); + return lua_error(L); + } free_space = s->out.allocated - s->out.length; } |