diff options
author | Diego Nehab <diego@tecgraf.puc-rio.br> | 2011-05-25 20:57:22 +0000 |
---|---|---|
committer | Diego Nehab <diego@tecgraf.puc-rio.br> | 2011-05-25 20:57:22 +0000 |
commit | 3a8ba90dfb0c2eb224f317dd692ede426691e72a (patch) | |
tree | fe1cc5379a2e0e031663fe9c15d908653844bc73 /src/buffer.c | |
parent | bce60be30fe8e9c1b0eb33128c23c93d7bca5303 (diff) | |
download | luasocket-3a8ba90dfb0c2eb224f317dd692ede426691e72a.tar.gz luasocket-3a8ba90dfb0c2eb224f317dd692ede426691e72a.tar.bz2 luasocket-3a8ba90dfb0c2eb224f317dd692ede426691e72a.zip |
Saving before big changes to support IPv6.
Diffstat (limited to 'src/buffer.c')
-rw-r--r-- | src/buffer.c | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/src/buffer.c b/src/buffer.c index 363da3d..5be0faf 100644 --- a/src/buffer.c +++ b/src/buffer.c | |||
@@ -42,7 +42,7 @@ int buffer_open(lua_State *L) { | |||
42 | * Initializes C structure | 42 | * Initializes C structure |
43 | \*-------------------------------------------------------------------------*/ | 43 | \*-------------------------------------------------------------------------*/ |
44 | void buffer_init(p_buffer buf, p_io io, p_timeout tm) { | 44 | void buffer_init(p_buffer buf, p_io io, p_timeout tm) { |
45 | buf->first = buf->last = 0; | 45 | buf->first = buf->last = 0; |
46 | buf->io = io; | 46 | buf->io = io; |
47 | buf->tm = tm; | 47 | buf->tm = tm; |
48 | buf->received = buf->sent = 0; | 48 | buf->received = buf->sent = 0; |
@@ -122,9 +122,15 @@ int buffer_meth_receive(lua_State *L, p_buffer buf) { | |||
122 | if (p[0] == '*' && p[1] == 'l') err = recvline(buf, &b); | 122 | if (p[0] == '*' && p[1] == 'l') err = recvline(buf, &b); |
123 | else if (p[0] == '*' && p[1] == 'a') err = recvall(buf, &b); | 123 | else if (p[0] == '*' && p[1] == 'a') err = recvall(buf, &b); |
124 | else luaL_argcheck(L, 0, 2, "invalid receive pattern"); | 124 | else luaL_argcheck(L, 0, 2, "invalid receive pattern"); |
125 | /* get a fixed number of bytes (minus what was already partially | 125 | /* get a fixed number of bytes (minus what was already partially |
126 | * received) */ | 126 | * received) */ |
127 | } else err = recvraw(buf, (size_t) lua_tonumber(L, 2)-size, &b); | 127 | } else { |
128 | double n = lua_tonumber(L, 2); | ||
129 | size_t wanted = (size_t) n; | ||
130 | luaL_argcheck(L, n >= 0, 2, "invalid receive pattern"); | ||
131 | if (size == 0 || wanted > size) | ||
132 | err = recvraw(buf, wanted-size, &b); | ||
133 | } | ||
128 | /* check if there was an error */ | 134 | /* check if there was an error */ |
129 | if (err != IO_DONE) { | 135 | if (err != IO_DONE) { |
130 | /* we can't push anyting in the stack before pushing the | 136 | /* we can't push anyting in the stack before pushing the |