diff options
Diffstat (limited to 'buffer.c')
-rw-r--r-- | buffer.c | 20 |
1 files changed, 12 insertions, 8 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) |