Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
ruanhaishen
hiredis
Commits
0a6e3b38
Commit
0a6e3b38
authored
Sep 20, 2010
by
Pieter Noordhuis
Browse files
Add context to createErrorObject
parent
db524404
Changes
1
Show whitespace changes
Inline
Side-by-side
hiredis.c
View file @
0a6e3b38
...
...
@@ -51,8 +51,12 @@ typedef struct redisReader {
static
redisReply
*
redisReadReply
(
int
fd
);
static
redisReply
*
createReplyObject
(
int
type
,
sds
reply
);
static
redisReply
*
createErrorObject
(
const
char
*
fmt
,
...);
static
void
redisSetReplyReaderError
(
redisReader
*
r
,
redisReply
*
error
);
static
void
*
createErrorObject
(
redisReader
*
context
,
const
char
*
fmt
,
...);
static
void
*
createStringObject
(
redisReadTask
*
task
,
char
*
str
,
size_t
len
);
static
void
*
createArrayObject
(
redisReadTask
*
task
,
int
elements
);
static
void
*
createIntegerObject
(
redisReadTask
*
task
,
long
long
value
);
static
void
*
createNilObject
(
redisReadTask
*
task
);
static
void
redisSetReplyReaderError
(
redisReader
*
r
,
void
*
obj
);
/* We simply abort on out of memory */
static
void
redisOOM
(
void
)
{
...
...
@@ -69,7 +73,7 @@ redisReply *redisConnect(int *fd, const char *ip, int port) {
*
fd
=
anetTcpConnect
(
err
,
ip
,
port
);
if
(
*
fd
==
ANET_ERR
)
return
createErrorObject
(
err
);
return
(
redisReply
*
)
createErrorObject
(
NULL
,
err
);
anetTcpNoDelay
(
NULL
,
*
fd
);
return
NULL
;
}
...
...
@@ -104,24 +108,23 @@ void freeReplyObject(redisReply *r) {
free
(
r
);
}
static
redisReply
*
createErrorObject
(
const
char
*
fmt
,
...)
{
static
void
*
createErrorObject
(
redisReader
*
context
,
const
char
*
fmt
,
...)
{
va_list
ap
;
sds
err
;
redisReply
*
r
;
void
*
obj
;
redisReadTask
t
=
{
REDIS_PROTOCOL_ERROR
,
NULL
,
-
1
};
va_start
(
ap
,
fmt
);
err
=
sdscatvprintf
(
sdsempty
(),
fmt
,
ap
);
va_end
(
ap
);
r
=
createReplyObject
(
REDIS_PROTOCOL_ERROR
,
err
);
return
r
;
}
static
redisReply
*
redisIOError
(
void
)
{
return
createErrorObject
(
"I/O error"
);
obj
=
createStringObject
(
&
t
,
err
,
sdslen
(
err
));
sdsfree
(
err
);
return
obj
;
}
static
void
*
createStringObject
(
redisReadTask
*
task
,
char
*
str
,
size_t
len
)
{
redisReply
*
r
=
createReplyObject
(
task
->
type
,
sdsnewlen
(
str
,
len
));
assert
(
task
->
type
==
REDIS_REPLY_ERROR
||
assert
(
task
->
type
==
REDIS_PROTOCOL_ERROR
||
task
->
type
==
REDIS_REPLY_ERROR
||
task
->
type
==
REDIS_REPLY_STATUS
||
task
->
type
==
REDIS_REPLY_STRING
);
...
...
@@ -325,7 +328,7 @@ static int processItem(redisReader *r) {
break
;
default:
byte
=
sdscatrepr
(
sdsempty
(),
p
,
1
);
redisSetReplyReaderError
(
r
,
createErrorObject
(
redisSetReplyReaderError
(
r
,
createErrorObject
(
r
,
"protocol error, got %s as reply type byte"
,
byte
));
sdsfree
(
byte
);
return
-
1
;
...
...
@@ -347,7 +350,7 @@ static int processItem(redisReader *r) {
case
REDIS_REPLY_ARRAY
:
return
processMultiBulkItem
(
r
);
default:
redisSetReplyReaderError
(
r
,
createErrorObject
(
redisSetReplyReaderError
(
r
,
createErrorObject
(
r
,
"unknown item type '%d'"
,
cur
->
type
));
return
-
1
;
}
...
...
@@ -362,7 +365,7 @@ static redisReply *redisReadReply(int fd) {
do
{
if
((
nread
=
read
(
fd
,
buf
,
sizeof
(
buf
)))
<=
0
)
{
reply
=
re
disIOE
rror
(
);
reply
=
c
re
ateErrorObject
(
reader
,
"I/O e
rror
"
);
break
;
}
else
{
reply
=
redisFeedReplyReader
(
reader
,
buf
,
nread
);
...
...
@@ -398,7 +401,7 @@ int redisIsReplyReaderEmpty(void *reader) {
return
1
;
}
static
void
redisSetReplyReaderError
(
redisReader
*
r
,
redisReply
*
error
)
{
static
void
redisSetReplyReaderError
(
redisReader
*
r
,
void
*
obj
)
{
if
(
r
->
reply
!=
NULL
)
freeReplyObject
(
r
->
reply
);
...
...
@@ -409,7 +412,7 @@ static void redisSetReplyReaderError(redisReader *r, redisReply *error) {
r
->
pos
=
0
;
}
r
->
rlen
=
r
->
rpos
=
0
;
r
->
reply
=
error
;
r
->
reply
=
obj
;
}
void
*
redisFeedReplyReader
(
void
*
reader
,
char
*
buf
,
int
len
)
{
...
...
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