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
29617b1a
Commit
29617b1a
authored
Jul 14, 2011
by
Pieter Noordhuis
Browse files
Rename occurances of errno (conflict with errno.h)
parent
82555dfa
Changes
3
Hide whitespace changes
Inline
Side-by-side
parser.c
View file @
29617b1a
...
...
@@ -7,7 +7,7 @@
#define ERRNO(code) REDIS_PARSER_##code
#define SET_ERRNO(code) do { \
parser->err
no
= ERRNO(code); \
parser->err = ERRNO(code);
\
} while(0)
/* The redis_protocol_t argument to the callback function must be provided by
...
...
@@ -56,7 +56,7 @@ enum state {
#undef _GEN
#define _GEN(code, description) description,
static
const
char
*
errno_str
[]
=
{
static
const
char
*
strerror_map
[]
=
{
REDIS_PARSER_ERRORS
(
_GEN
)
};
#undef _GEN
...
...
@@ -131,7 +131,7 @@ static const char *chrtos(char byte) {
void
redis_parser_init
(
redis_parser_t
*
parser
,
const
redis_parser_callbacks_t
*
callbacks
)
{
parser
->
stackidx
=
-
1
;
parser
->
callbacks
=
callbacks
;
parser
->
err
no
=
0
;
parser
->
err
=
0
;
}
/* Execute the parser against len bytes in buf. When a full message was read,
...
...
@@ -155,7 +155,7 @@ size_t redis_parser_execute(redis_parser_t *parser, redis_protocol_t **dst, cons
/* Abort immediately if the parser is in an error state. It should be
* re-initialized before attempting to execute it with new data. */
if
(
parser
->
err
no
)
{
if
(
parser
->
err
)
{
return
0
;
}
...
...
@@ -486,19 +486,19 @@ finalize:
error:
if
(
parser
->
err
no
==
ERRNO
(
OK
))
{
if
(
parser
->
err
==
ERRNO
(
OK
))
{
SET_ERRNO
(
ERR_UNKNOWN
);
}
return
pos
-
buf
;
}
redis_parser_err
no
_t
redis_parser_err
no
(
redis_parser_t
*
parser
)
{
return
parser
->
err
no
;
redis_parser_err_t
redis_parser_err
(
redis_parser_t
*
parser
)
{
return
parser
->
err
;
}
const
char
*
redis_parser_strerror
(
redis_parser_err
no
_t
err
no
)
{
if
(
err
no
<
(
sizeof
(
errno_str
)
/
sizeof
(
errno_str
[
0
])))
return
errno_str
[
err
no
];
const
char
*
redis_parser_strerror
(
redis_parser_err_t
err
)
{
if
(
err
<
(
sizeof
(
strerror_map
)
/
sizeof
(
strerror_map
[
0
])))
return
strerror_map
[
err
];
return
NULL
;
}
parser.h
View file @
29617b1a
...
...
@@ -45,9 +45,9 @@ struct redis_parser_callbacks_s {
_X(ERR_EXPECTED_LF, "expected \\n") \
#define _REDIS_PARSER_ERRNO_ENUM_GEN(code, description) REDIS_PARSER_##code,
typedef
enum
redis_parser_err
no
_e
{
typedef
enum
redis_parser_err_e
{
REDIS_PARSER_ERRORS
(
_REDIS_PARSER_ERRNO_ENUM_GEN
)
}
redis_parser_err
no
_t
;
}
redis_parser_err_t
;
#undef _REDIS_PARSER_ERRNO_ENUM_GEN
struct
redis_protocol_s
{
...
...
@@ -75,7 +75,7 @@ struct redis_parser_s {
/* private: parser state */
unsigned
char
state
;
unsigned
char
err
no
;
redis_parser_err_t
err
;
/* private: temporary integer (integer reply, bulk length) */
struct
redis_parser_int64_s
{
...
...
@@ -86,7 +86,7 @@ struct redis_parser_s {
void
redis_parser_init
(
redis_parser_t
*
parser
,
const
redis_parser_callbacks_t
*
callbacks
);
size_t
redis_parser_execute
(
redis_parser_t
*
parser
,
redis_protocol_t
**
dst
,
const
char
*
buf
,
size_t
len
);
redis_parser_err
no
_t
redis_parser_err
no
(
redis_parser_t
*
parser
);
const
char
*
redis_parser_strerror
(
redis_parser_err
no
_t
err
no
);
redis_parser_err_t
redis_parser_err
(
redis_parser_t
*
parser
);
const
char
*
redis_parser_strerror
(
redis_parser_err_t
err
);
#endif // __REDIS_PARSER_H
test/parser.c
View file @
29617b1a
...
...
@@ -358,42 +358,42 @@ void test_integer(redis_parser_t *p) {
RESET_PARSER_T
(
p
);
assert_equal_size_t
(
redis_parser_execute
(
p
,
&
res
,
buf
,
strlen
(
buf
)),
2
);
assert
(
res
==
NULL
);
assert
(
redis_parser_err
no
(
p
)
==
REDIS_PARSER_ERR_INVALID_INT
);
assert
(
redis_parser_err
(
p
)
==
REDIS_PARSER_ERR_INVALID_INT
);
/* Signed zero, negative */
buf
=
":-0
\r\n
"
;
RESET_PARSER_T
(
p
);
assert_equal_size_t
(
redis_parser_execute
(
p
,
&
res
,
buf
,
strlen
(
buf
)),
2
);
assert
(
res
==
NULL
);
assert
(
redis_parser_err
no
(
p
)
==
REDIS_PARSER_ERR_INVALID_INT
);
assert
(
redis_parser_err
(
p
)
==
REDIS_PARSER_ERR_INVALID_INT
);
/* Start with 0 */
buf
=
":0123
\r\n
"
;
RESET_PARSER_T
(
p
);
assert_equal_size_t
(
redis_parser_execute
(
p
,
&
res
,
buf
,
strlen
(
buf
)),
2
);
assert
(
res
==
NULL
);
assert
(
redis_parser_err
no
(
p
)
==
REDIS_PARSER_ERR_EXPECTED_CR
);
assert
(
redis_parser_err
(
p
)
==
REDIS_PARSER_ERR_EXPECTED_CR
);
/* Start with non-digit */
buf
=
":x123
\r\n
"
;
RESET_PARSER_T
(
p
);
assert_equal_size_t
(
redis_parser_execute
(
p
,
&
res
,
buf
,
strlen
(
buf
)),
1
);
assert
(
res
==
NULL
);
assert
(
redis_parser_err
no
(
p
)
==
REDIS_PARSER_ERR_INVALID_INT
);
assert
(
redis_parser_err
(
p
)
==
REDIS_PARSER_ERR_INVALID_INT
);
/* Non-digit in the middle */
buf
=
":12x3
\r\n
"
;
RESET_PARSER_T
(
p
);
assert_equal_size_t
(
redis_parser_execute
(
p
,
&
res
,
buf
,
strlen
(
buf
)),
3
);
assert
(
res
==
NULL
);
assert
(
redis_parser_err
no
(
p
)
==
REDIS_PARSER_ERR_INVALID_INT
);
assert
(
redis_parser_err
(
p
)
==
REDIS_PARSER_ERR_INVALID_INT
);
/* Non-digit at the end */
buf
=
":123x
\r\n
"
;
RESET_PARSER_T
(
p
);
assert_equal_size_t
(
redis_parser_execute
(
p
,
&
res
,
buf
,
strlen
(
buf
)),
4
);
assert
(
res
==
NULL
);
assert
(
redis_parser_err
no
(
p
)
==
REDIS_PARSER_ERR_INVALID_INT
);
assert
(
redis_parser_err
(
p
)
==
REDIS_PARSER_ERR_INVALID_INT
);
/* Signed 64-bit maximum */
buf
=
":9223372036854775807
\r\n
"
;
...
...
@@ -409,7 +409,7 @@ void test_integer(redis_parser_t *p) {
RESET_PARSER_T
(
p
);
assert_equal_size_t
(
redis_parser_execute
(
p
,
&
res
,
buf
,
strlen
(
buf
)),
strlen
(
buf
)
-
3
);
assert
(
res
==
NULL
);
assert
(
redis_parser_err
no
(
p
)
==
REDIS_PARSER_ERR_OVERFLOW
);
assert
(
redis_parser_err
(
p
)
==
REDIS_PARSER_ERR_OVERFLOW
);
/* Signed 64-bit minimum */
buf
=
":-9223372036854775808
\r\n
"
;
...
...
@@ -425,7 +425,7 @@ void test_integer(redis_parser_t *p) {
RESET_PARSER_T
(
p
);
assert_equal_size_t
(
redis_parser_execute
(
p
,
&
res
,
buf
,
strlen
(
buf
)),
strlen
(
buf
)
-
3
);
assert
(
res
==
NULL
);
assert
(
redis_parser_err
no
(
p
)
==
REDIS_PARSER_ERR_OVERFLOW
);
assert
(
redis_parser_err
(
p
)
==
REDIS_PARSER_ERR_OVERFLOW
);
}
void
test_nil
(
redis_parser_t
*
p
)
{
...
...
@@ -493,7 +493,7 @@ void test_error(redis_parser_t *p) {
void
test_abort_after_error
(
redis_parser_t
*
p
)
{
redis_protocol_t
*
res
;
redis_parser_err
no
_t
err
no
;
redis_parser_err_t
err
;
assert_equal_size_t
(
redis_parser_execute
(
p
,
&
res
,
"+ok
\r
"
,
4
),
4
);
assert
(
res
==
NULL
);
...
...
@@ -501,9 +501,9 @@ void test_abort_after_error(redis_parser_t *p) {
assert
(
res
==
NULL
);
/* Test if the error matches what we expect */
err
no
=
redis_parser_err
no
(
p
);
assert
(
err
no
==
REDIS_PARSER_ERR_EXPECTED_LF
);
assert
(
strcmp
(
"expected
\\
n"
,
redis_parser_strerror
(
err
no
))
==
0
);
err
=
redis_parser_err
(
p
);
assert
(
err
==
REDIS_PARSER_ERR_EXPECTED_LF
);
assert
(
strcmp
(
"expected
\\
n"
,
redis_parser_strerror
(
err
))
==
0
);
/* Test that the parser doesn't continue after an error */
assert_equal_size_t
(
redis_parser_execute
(
p
,
&
res
,
"
\n
"
,
1
),
0
);
...
...
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