Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
ruanhaishen
hiredis
Commits
b127f31e
Commit
b127f31e
authored
Jul 05, 2011
by
Pieter Noordhuis
Browse files
Rename macros
parent
61346066
Changes
1
Hide whitespace changes
Inline
Side-by-side
parser.c
View file @
b127f31e
...
...
@@ -58,15 +58,19 @@ static const char * strstate[] = {
goto finalize; \
}
#define TRANSITION(st) do { \
pos++; nread++; \
TRANSITION_WITHOUT_POS_INCR(st); \
#define ADVANCE(bytes) do { \
pos += (bytes); nread += (bytes); \
} while(0)
#define
TRANSITION_WITHOUT_POS_INCR(st) do {
\
#define
MOVE(st) do {
\
goto l_##st; \
} while(0)
#define ADVANCE_AND_MOVE(st) do { \
ADVANCE(1); \
MOVE(st); \
} while(0)
#ifdef DEBUG
#define LOG(fmt, args...) do { \
fprintf(stderr, fmt "\n" , ## args); \
...
...
@@ -161,13 +165,13 @@ size_t redis_parser_execute(redis_parser_t *parser, redis_protocol_t **dst, cons
switch
(
*
pos
)
{
case
'$'
:
cur
->
type
=
REDIS_STRING_T
;
TRANSITION
(
integer_start
);
ADVANCE_AND_MOVE
(
integer_start
);
case
'*'
:
cur
->
type
=
REDIS_ARRAY_T
;
TRANSITION
(
integer_start
);
ADVANCE_AND_MOVE
(
integer_start
);
case
':'
:
cur
->
type
=
REDIS_INTEGER_T
;
TRANSITION
(
integer_start
);
ADVANCE_AND_MOVE
(
integer_start
);
case
'+'
:
cur
->
type
=
REDIS_STATUS_T
;
assert
(
NULL
);
...
...
@@ -187,24 +191,24 @@ size_t redis_parser_execute(redis_parser_t *parser, redis_protocol_t **dst, cons
/* Start with number */
if
(
ch
>=
'1'
&&
ch
<=
'9'
)
{
i64
.
ui64
=
ch
-
'0'
;
TRANSITION
(
integer_09
);
ADVANCE_AND_MOVE
(
integer_09
);
}
/* Start with negative sign */
if
(
ch
==
'-'
)
{
i64
.
neg
=
1
;
TRANSITION
(
integer_19
);
ADVANCE_AND_MOVE
(
integer_19
);
}
/* Start with positive sign */
if
(
ch
==
'+'
)
{
i64
.
neg
=
0
;
TRANSITION
(
integer_19
);
ADVANCE_AND_MOVE
(
integer_19
);
}
/* Single integer character is a zero */
if
(
ch
==
'0'
)
{
TRANSITION
(
integer_cr
);
ADVANCE_AND_MOVE
(
integer_cr
);
}
goto
error
;
...
...
@@ -215,7 +219,7 @@ size_t redis_parser_execute(redis_parser_t *parser, redis_protocol_t **dst, cons
if
(
ch
>=
'1'
&&
ch
<=
'9'
)
{
i64
.
ui64
=
ch
-
'0'
;
TRANSITION
(
integer_09
);
ADVANCE_AND_MOVE
(
integer_09
);
}
goto
error
;
...
...
@@ -231,9 +235,9 @@ size_t redis_parser_execute(redis_parser_t *parser, redis_protocol_t **dst, cons
if
(
i64
.
ui64
>
(
UINT64_MAX
-
(
ch
-
'0'
)))
/* Overflow */
goto
error
;
i64
.
ui64
+=
ch
-
'0'
;
TRANSITION
(
integer_09
);
ADVANCE_AND_MOVE
(
integer_09
);
}
else
if
(
ch
==
'\r'
)
{
TRANSITION
(
integer_lf
);
ADVANCE_AND_MOVE
(
integer_lf
);
}
goto
error
;
...
...
@@ -241,7 +245,7 @@ size_t redis_parser_execute(redis_parser_t *parser, redis_protocol_t **dst, cons
STATE
(
integer_cr
)
{
if
(
*
pos
==
'\r'
)
{
TRANSITION
(
integer_lf
);
ADVANCE_AND_MOVE
(
integer_lf
);
}
goto
error
;
...
...
@@ -279,7 +283,7 @@ size_t redis_parser_execute(redis_parser_t *parser, redis_protocol_t **dst, cons
/* Store remaining bytes for a complete bulk */
cur
->
remaining
=
(
unsigned
)
i64
.
i64
;
TRANSITION
(
bulk
);
ADVANCE_AND_MOVE
(
bulk
);
}
if
(
cur
->
type
==
REDIS_ARRAY_T
)
{
...
...
@@ -313,8 +317,8 @@ size_t redis_parser_execute(redis_parser_t *parser, redis_protocol_t **dst, cons
if
(
remaining
<=
available
)
{
cur
->
remaining
=
0
;
CALLBACK
(
string
,
pos
,
remaining
);
pos
+=
remaining
;
nread
+=
remaining
;
TRANSITION_WITHOUT_POS_INCR
(
bulk_cr
);
ADVANCE
(
remaining
)
;
MOVE
(
bulk_cr
);
}
/* Not everything can be read */
...
...
@@ -326,7 +330,7 @@ size_t redis_parser_execute(redis_parser_t *parser, redis_protocol_t **dst, cons
STATE
(
bulk_cr
)
{
if
(
*
pos
==
'\r'
)
{
TRANSITION
(
bulk_lf
);
ADVANCE_AND_MOVE
(
bulk_lf
);
}
goto
error
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment