mirror of
https://github.com/sogou/workflow.git
synced 2026-02-08 01:33:17 +08:00
simplify code
This commit is contained in:
@@ -309,7 +309,6 @@ void redis_parser_init(redis_parser_t *parser)
|
||||
INIT_LIST_HEAD(&parser->read_list);
|
||||
parser->msgidx = 0;
|
||||
parser->cmd = '\0';
|
||||
parser->is_inline = 0;
|
||||
parser->nchar = 0;
|
||||
parser->findidx = 0;
|
||||
}
|
||||
@@ -387,6 +386,7 @@ static int __redis_split_inline_command(redis_parser_t *parser)
|
||||
if (arr_size == 0)
|
||||
{
|
||||
parser->msgsize = 0;
|
||||
parser->msgidx = 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -419,63 +419,17 @@ static int __redis_split_inline_command(redis_parser_t *parser)
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int __redis_append_inline_command(const void *buf, size_t *size,
|
||||
redis_parser_t *parser)
|
||||
{
|
||||
const char *msg = (const char *)buf;
|
||||
size_t sz = 0;
|
||||
|
||||
while (sz < *size && msg[sz] != '\n')
|
||||
sz++;
|
||||
|
||||
if (parser->msgsize + sz > parser->bufsize)
|
||||
{
|
||||
size_t new_size = MAX(REDIS_MSGBUF_INIT_SIZE, 2 * parser->bufsize);
|
||||
void *new_base;
|
||||
|
||||
while (new_size < parser->msgsize + sz)
|
||||
new_size *= 2;
|
||||
|
||||
new_base = realloc(parser->msgbuf, new_size);
|
||||
if (!new_base)
|
||||
return -1;
|
||||
|
||||
parser->msgbuf = new_base;
|
||||
parser->bufsize = new_size;
|
||||
}
|
||||
|
||||
memcpy((char *)parser->msgbuf + parser->msgsize, buf, sz);
|
||||
parser->msgsize += sz;
|
||||
|
||||
if (sz == *size)
|
||||
return 0;
|
||||
|
||||
*size = sz + 1;
|
||||
|
||||
msg = (const char *)parser->msgbuf;
|
||||
if (parser->msgsize > 0 && msg[parser->msgsize - 1] == '\r')
|
||||
parser->msgsize--;
|
||||
|
||||
return __redis_split_inline_command(parser);
|
||||
}
|
||||
|
||||
int redis_parser_append_message(const void *buf, size_t *size,
|
||||
redis_parser_t *parser)
|
||||
{
|
||||
size_t msgsize_bak = parser->msgsize;
|
||||
|
||||
if (msgsize_bak == 0 && *size > 0 && *(char *)buf != '*')
|
||||
parser->is_inline = 1;
|
||||
|
||||
if (parser->status == REDIS_PARSE_END)
|
||||
{
|
||||
*size = 0;
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (parser->is_inline)
|
||||
return __redis_append_inline_command(buf, size, parser);
|
||||
|
||||
if (parser->msgsize + *size > parser->bufsize)
|
||||
{
|
||||
size_t new_size = MAX(REDIS_MSGBUF_INIT_SIZE, 2 * parser->bufsize);
|
||||
@@ -495,6 +449,24 @@ int redis_parser_append_message(const void *buf, size_t *size,
|
||||
memcpy((char *)parser->msgbuf + parser->msgsize, buf, *size);
|
||||
parser->msgsize += *size;
|
||||
|
||||
if (parser->msgsize && *(const char *)parser->msgbuf != '*')
|
||||
{
|
||||
while (parser->msgidx < parser->msgsize &&
|
||||
*((const char *)parser->msgbuf + parser->msgidx) != '\n')
|
||||
{
|
||||
parser->msgidx++;
|
||||
}
|
||||
|
||||
if (parser->msgidx == parser->msgsize)
|
||||
return 0;
|
||||
|
||||
parser->msgidx++;
|
||||
parser->msgsize = parser->msgidx;
|
||||
*size = parser->msgsize - msgsize_bak;
|
||||
|
||||
return __redis_split_inline_command(parser);
|
||||
}
|
||||
|
||||
do
|
||||
{
|
||||
int ret = __redis_parser_forward(parser);
|
||||
|
||||
@@ -55,7 +55,6 @@ typedef struct __redis_parser
|
||||
int nleft;
|
||||
int nchar;
|
||||
char cmd;
|
||||
char is_inline;
|
||||
redis_reply_t reply;
|
||||
} redis_parser_t;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user