summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lua.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/lua.c b/lua.c
index 3efe22b..abae88c 100644
--- a/lua.c
+++ b/lua.c
@@ -46,13 +46,14 @@ static int uh_lua_recv(lua_State *L)
int len;
int r;
- len = luaL_checknumber(L, 1);
+ len = luaL_optnumber(L, 1, LUAL_BUFFERSIZE);
luaL_buffinit(L, &B);
while(len > 0) {
char *buf;
buf = luaL_prepbuffer(&B);
- r = read(STDIN_FILENO, buf, LUAL_BUFFERSIZE);
+ r = read(STDIN_FILENO, buf,
+ len < LUAL_BUFFERSIZE ? len : LUAL_BUFFERSIZE);
if (r < 0) {
if (errno == EWOULDBLOCK || errno == EAGAIN) {
pfd.revents = 0;
@@ -72,6 +73,7 @@ static int uh_lua_recv(lua_State *L)
luaL_addsize(&B, r);
data_len += r;
+ len -= r;
if (r != LUAL_BUFFERSIZE)
break;
}