mirror of
https://github.com/lunarmodules/luasocket.git
synced 2024-12-26 04:28:20 +01:00
Receive line with ending
This commit is contained in:
parent
c27c23074c
commit
b0470f4a0e
11
src/buffer.c
11
src/buffer.c
@ -9,7 +9,7 @@
|
|||||||
* Internal function prototypes
|
* Internal function prototypes
|
||||||
\*=========================================================================*/
|
\*=========================================================================*/
|
||||||
static int recvraw(p_buffer buf, size_t wanted, luaL_Buffer *b);
|
static int recvraw(p_buffer buf, size_t wanted, luaL_Buffer *b);
|
||||||
static int recvline(p_buffer buf, luaL_Buffer *b);
|
static int recvline(p_buffer buf, luaL_Buffer *b, int chop);
|
||||||
static int recvall(p_buffer buf, luaL_Buffer *b);
|
static int recvall(p_buffer buf, luaL_Buffer *b);
|
||||||
static int buffer_get(p_buffer buf, const char **data, size_t *count);
|
static int buffer_get(p_buffer buf, const char **data, size_t *count);
|
||||||
static void buffer_skip(p_buffer buf, size_t count);
|
static void buffer_skip(p_buffer buf, size_t count);
|
||||||
@ -118,7 +118,10 @@ int buffer_meth_receive(lua_State *L, p_buffer buf) {
|
|||||||
if (*p == '*') p++; /* skip optional '*' (for compatibility) */
|
if (*p == '*') p++; /* skip optional '*' (for compatibility) */
|
||||||
switch (*p) {
|
switch (*p) {
|
||||||
case 'l': /* line */
|
case 'l': /* line */
|
||||||
err = recvline(buf, &b);
|
err = recvline(buf, &b, 1);
|
||||||
|
break;
|
||||||
|
case 'L': /* line with \n */
|
||||||
|
err = recvline(buf, &b, 0);
|
||||||
break;
|
break;
|
||||||
case 'a': /* all */
|
case 'a': /* all */
|
||||||
err = recvall(buf, &b);
|
err = recvall(buf, &b);
|
||||||
@ -227,7 +230,7 @@ static int recvall(p_buffer buf, luaL_Buffer *b) {
|
|||||||
* Reads a line terminated by a CR LF pair or just by a LF. The CR and LF
|
* Reads a line terminated by a CR LF pair or just by a LF. The CR and LF
|
||||||
* are not returned by the function and are discarded from the buffer
|
* are not returned by the function and are discarded from the buffer
|
||||||
\*-------------------------------------------------------------------------*/
|
\*-------------------------------------------------------------------------*/
|
||||||
static int recvline(p_buffer buf, luaL_Buffer *b) {
|
static int recvline(p_buffer buf, luaL_Buffer *b, int chop) {
|
||||||
int err = IO_DONE;
|
int err = IO_DONE;
|
||||||
while (err == IO_DONE) {
|
while (err == IO_DONE) {
|
||||||
size_t count, pos; const char *data;
|
size_t count, pos; const char *data;
|
||||||
@ -239,6 +242,8 @@ static int recvline(p_buffer buf, luaL_Buffer *b) {
|
|||||||
pos++;
|
pos++;
|
||||||
}
|
}
|
||||||
if (pos < count) { /* found '\n' */
|
if (pos < count) { /* found '\n' */
|
||||||
|
if (!chop)
|
||||||
|
luaL_addchar(b, '\n');
|
||||||
buffer_skip(buf, pos+1); /* skip '\n' too */
|
buffer_skip(buf, pos+1); /* skip '\n' too */
|
||||||
break; /* we are done */
|
break; /* we are done */
|
||||||
} else /* reached the end of the buffer */
|
} else /* reached the end of the buffer */
|
||||||
|
Loading…
Reference in New Issue
Block a user