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
73b6930e
Commit
73b6930e
authored
Jul 05, 2011
by
Pieter Noordhuis
Browse files
Rename integer states
parent
bb95fb44
Changes
1
Show whitespace changes
Inline
Side-by-side
parser.c
View file @
73b6930e
...
...
@@ -27,9 +27,9 @@
#define PARSER_STATES(X) \
X(unused)
/* = 0 in enum */
\
X(type_char) \
X(integer_sign) \
X(integer_start) \
X(integer_body) \
X(integer_19) \
X(integer_09) \
X(integer_lf) \
X(bulk) \
X(bulk_cr) \
...
...
@@ -163,13 +163,13 @@ size_t redis_parser_execute(redis_parser_t *parser, redis_protocol_t **dst, cons
switch
(
ch
)
{
case
'$'
:
cur
->
type
=
REDIS_STRING_T
;
TRANSITION
(
integer_s
ign
);
TRANSITION
(
integer_s
tart
);
case
'*'
:
cur
->
type
=
REDIS_ARRAY_T
;
TRANSITION
(
integer_s
ign
);
TRANSITION
(
integer_s
tart
);
case
':'
:
cur
->
type
=
REDIS_INTEGER_T
;
TRANSITION
(
integer_s
ign
);
TRANSITION
(
integer_s
tart
);
case
'+'
:
cur
->
type
=
REDIS_STATUS_T
;
assert
(
NULL
);
...
...
@@ -181,8 +181,8 @@ size_t redis_parser_execute(redis_parser_t *parser, redis_protocol_t **dst, cons
goto
error
;
}
case
s_integer_s
ign
:
l_integer_s
ign
:
case
s_integer_s
tart
:
l_integer_s
tart
:
{
i64
.
neg
=
0
;
i64
.
ui64
=
0
;
...
...
@@ -190,31 +190,31 @@ size_t redis_parser_execute(redis_parser_t *parser, redis_protocol_t **dst, cons
/* Break when char was consumed */
if
(
ch
==
'-'
)
{
i64
.
neg
=
1
;
TRANSITION
(
integer_
start
);
TRANSITION
(
integer_
19
);
}
/* First integer character */
if
(
ch
>=
'1'
&&
ch
<=
'9'
)
{
i64
.
ui64
=
ch
-
'0'
;
TRANSITION
(
integer_
body
);
TRANSITION
(
integer_
09
);
}
goto
error
;
}
case
s_integer_
start
:
l_integer_
start
:
case
s_integer_
19
:
l_integer_
19
:
{
if
(
ch
>=
'1'
&&
ch
<=
'9'
)
{
i64
.
ui64
=
ch
-
'0'
;
TRANSITION
(
integer_
body
);
TRANSITION
(
integer_
09
);
}
goto
error
;
}
case
s_integer_
body
:
l_integer_
body
:
case
s_integer_
09
:
l_integer_
09
:
{
if
(
ch
>=
'0'
&&
ch
<=
'9'
)
{
if
(
i64
.
ui64
>
(
UINT64_MAX
/
10
))
/* Overflow */
...
...
@@ -223,7 +223,7 @@ 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_
body
);
TRANSITION
(
integer_
09
);
}
else
if
(
ch
==
'\r'
)
{
/* Check if the uint64_t can be safely casted to int64_t */
if
(
i64
.
neg
)
{
...
...
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