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
redis
Commits
6866158f
Commit
6866158f
authored
Aug 15, 2020
by
michael-grunder
Browse files
Merge commit '
bffbbeaa
' into hiredis-unique-sds-symbols
parents
11cd983d
bffbbeaa
Changes
11
Expand all
Hide whitespace changes
Inline
Side-by-side
deps/hiredis/async.c
View file @
6866158f
...
@@ -54,7 +54,7 @@ void __redisSetError(redisContext *c, int type, const char *str);
...
@@ -54,7 +54,7 @@ void __redisSetError(redisContext *c, int type, const char *str);
/* Functions managing dictionary of callbacks for pub/sub. */
/* Functions managing dictionary of callbacks for pub/sub. */
static
unsigned
int
callbackHash
(
const
void
*
key
)
{
static
unsigned
int
callbackHash
(
const
void
*
key
)
{
return
dictGenHashFunction
((
const
unsigned
char
*
)
key
,
return
dictGenHashFunction
((
const
unsigned
char
*
)
key
,
sdslen
((
const
sds
)
key
));
hi_
sdslen
((
const
hi
sds
)
key
));
}
}
static
void
*
callbackValDup
(
void
*
privdata
,
const
void
*
src
)
{
static
void
*
callbackValDup
(
void
*
privdata
,
const
void
*
src
)
{
...
@@ -73,15 +73,15 @@ static int callbackKeyCompare(void *privdata, const void *key1, const void *key2
...
@@ -73,15 +73,15 @@ static int callbackKeyCompare(void *privdata, const void *key1, const void *key2
int
l1
,
l2
;
int
l1
,
l2
;
((
void
)
privdata
);
((
void
)
privdata
);
l1
=
sdslen
((
const
sds
)
key1
);
l1
=
hi_
sdslen
((
const
hi
sds
)
key1
);
l2
=
sdslen
((
const
sds
)
key2
);
l2
=
hi_
sdslen
((
const
hi
sds
)
key2
);
if
(
l1
!=
l2
)
return
0
;
if
(
l1
!=
l2
)
return
0
;
return
memcmp
(
key1
,
key2
,
l1
)
==
0
;
return
memcmp
(
key1
,
key2
,
l1
)
==
0
;
}
}
static
void
callbackKeyDestructor
(
void
*
privdata
,
void
*
key
)
{
static
void
callbackKeyDestructor
(
void
*
privdata
,
void
*
key
)
{
((
void
)
privdata
);
((
void
)
privdata
);
sdsfree
((
sds
)
key
);
hi_
sdsfree
((
hi
sds
)
key
);
}
}
static
void
callbackValDestructor
(
void
*
privdata
,
void
*
val
)
{
static
void
callbackValDestructor
(
void
*
privdata
,
void
*
val
)
{
...
@@ -418,7 +418,7 @@ static int __redisGetSubscribeCallback(redisAsyncContext *ac, redisReply *reply,
...
@@ -418,7 +418,7 @@ static int __redisGetSubscribeCallback(redisAsyncContext *ac, redisReply *reply,
dictEntry
*
de
;
dictEntry
*
de
;
int
pvariant
;
int
pvariant
;
char
*
stype
;
char
*
stype
;
sds
sname
;
hi
sds
sname
;
/* Custom reply functions are not supported for pub/sub. This will fail
/* Custom reply functions are not supported for pub/sub. This will fail
* very hard when they are used... */
* very hard when they are used... */
...
@@ -435,7 +435,7 @@ static int __redisGetSubscribeCallback(redisAsyncContext *ac, redisReply *reply,
...
@@ -435,7 +435,7 @@ static int __redisGetSubscribeCallback(redisAsyncContext *ac, redisReply *reply,
/* Locate the right callback */
/* Locate the right callback */
assert
(
reply
->
element
[
1
]
->
type
==
REDIS_REPLY_STRING
);
assert
(
reply
->
element
[
1
]
->
type
==
REDIS_REPLY_STRING
);
sname
=
sdsnewlen
(
reply
->
element
[
1
]
->
str
,
reply
->
element
[
1
]
->
len
);
sname
=
hi_
sdsnewlen
(
reply
->
element
[
1
]
->
str
,
reply
->
element
[
1
]
->
len
);
if
(
sname
==
NULL
)
if
(
sname
==
NULL
)
goto
oom
;
goto
oom
;
...
@@ -466,7 +466,7 @@ static int __redisGetSubscribeCallback(redisAsyncContext *ac, redisReply *reply,
...
@@ -466,7 +466,7 @@ static int __redisGetSubscribeCallback(redisAsyncContext *ac, redisReply *reply,
c
->
flags
&=
~
REDIS_SUBSCRIBED
;
c
->
flags
&=
~
REDIS_SUBSCRIBED
;
}
}
}
}
sdsfree
(
sname
);
hi_
sdsfree
(
sname
);
}
else
{
}
else
{
/* Shift callback for invalid commands. */
/* Shift callback for invalid commands. */
__redisShiftCallback
(
&
ac
->
sub
.
invalid
,
dstcb
);
__redisShiftCallback
(
&
ac
->
sub
.
invalid
,
dstcb
);
...
@@ -511,7 +511,7 @@ void redisProcessCallbacks(redisAsyncContext *ac) {
...
@@ -511,7 +511,7 @@ void redisProcessCallbacks(redisAsyncContext *ac) {
if
(
reply
==
NULL
)
{
if
(
reply
==
NULL
)
{
/* When the connection is being disconnected and there are
/* When the connection is being disconnected and there are
* no more replies, this is the cue to really disconnect. */
* no more replies, this is the cue to really disconnect. */
if
(
c
->
flags
&
REDIS_DISCONNECTING
&&
sdslen
(
c
->
obuf
)
==
0
if
(
c
->
flags
&
REDIS_DISCONNECTING
&&
hi_
sdslen
(
c
->
obuf
)
==
0
&&
ac
->
replies
.
head
==
NULL
)
{
&&
ac
->
replies
.
head
==
NULL
)
{
__redisAsyncDisconnect
(
ac
);
__redisAsyncDisconnect
(
ac
);
return
;
return
;
...
@@ -744,7 +744,7 @@ static int __redisAsyncCommand(redisAsyncContext *ac, redisCallbackFn *fn, void
...
@@ -744,7 +744,7 @@ static int __redisAsyncCommand(redisAsyncContext *ac, redisCallbackFn *fn, void
const
char
*
cstr
,
*
astr
;
const
char
*
cstr
,
*
astr
;
size_t
clen
,
alen
;
size_t
clen
,
alen
;
const
char
*
p
;
const
char
*
p
;
sds
sname
;
hi
sds
sname
;
int
ret
;
int
ret
;
/* Don't accept new commands when the connection is about to be closed. */
/* Don't accept new commands when the connection is about to be closed. */
...
@@ -768,7 +768,7 @@ static int __redisAsyncCommand(redisAsyncContext *ac, redisCallbackFn *fn, void
...
@@ -768,7 +768,7 @@ static int __redisAsyncCommand(redisAsyncContext *ac, redisCallbackFn *fn, void
/* Add every channel/pattern to the list of subscription callbacks. */
/* Add every channel/pattern to the list of subscription callbacks. */
while
((
p
=
nextArgument
(
p
,
&
astr
,
&
alen
))
!=
NULL
)
{
while
((
p
=
nextArgument
(
p
,
&
astr
,
&
alen
))
!=
NULL
)
{
sname
=
sdsnewlen
(
astr
,
alen
);
sname
=
hi_
sdsnewlen
(
astr
,
alen
);
if
(
sname
==
NULL
)
if
(
sname
==
NULL
)
goto
oom
;
goto
oom
;
...
@@ -786,7 +786,7 @@ static int __redisAsyncCommand(redisAsyncContext *ac, redisCallbackFn *fn, void
...
@@ -786,7 +786,7 @@ static int __redisAsyncCommand(redisAsyncContext *ac, redisCallbackFn *fn, void
ret
=
dictReplace
(
cbdict
,
sname
,
&
cb
);
ret
=
dictReplace
(
cbdict
,
sname
,
&
cb
);
if
(
ret
==
0
)
sdsfree
(
sname
);
if
(
ret
==
0
)
hi_
sdsfree
(
sname
);
}
}
}
else
if
(
strncasecmp
(
cstr
,
"unsubscribe
\r\n
"
,
13
)
==
0
)
{
}
else
if
(
strncasecmp
(
cstr
,
"unsubscribe
\r\n
"
,
13
)
==
0
)
{
/* It is only useful to call (P)UNSUBSCRIBE when the context is
/* It is only useful to call (P)UNSUBSCRIBE when the context is
...
@@ -845,14 +845,14 @@ int redisAsyncCommand(redisAsyncContext *ac, redisCallbackFn *fn, void *privdata
...
@@ -845,14 +845,14 @@ int redisAsyncCommand(redisAsyncContext *ac, redisCallbackFn *fn, void *privdata
}
}
int
redisAsyncCommandArgv
(
redisAsyncContext
*
ac
,
redisCallbackFn
*
fn
,
void
*
privdata
,
int
argc
,
const
char
**
argv
,
const
size_t
*
argvlen
)
{
int
redisAsyncCommandArgv
(
redisAsyncContext
*
ac
,
redisCallbackFn
*
fn
,
void
*
privdata
,
int
argc
,
const
char
**
argv
,
const
size_t
*
argvlen
)
{
sds
cmd
;
hi
sds
cmd
;
int
len
;
int
len
;
int
status
;
int
status
;
len
=
redisFormatSdsCommandArgv
(
&
cmd
,
argc
,
argv
,
argvlen
);
len
=
redisFormatSdsCommandArgv
(
&
cmd
,
argc
,
argv
,
argvlen
);
if
(
len
<
0
)
if
(
len
<
0
)
return
REDIS_ERR
;
return
REDIS_ERR
;
status
=
__redisAsyncCommand
(
ac
,
fn
,
privdata
,
cmd
,
len
);
status
=
__redisAsyncCommand
(
ac
,
fn
,
privdata
,
cmd
,
len
);
sdsfree
(
cmd
);
hi_
sdsfree
(
cmd
);
return
status
;
return
status
;
}
}
...
...
deps/hiredis/hiredis.c
View file @
6866158f
...
@@ -305,7 +305,7 @@ int redisvFormatCommand(char **target, const char *format, va_list ap) {
...
@@ -305,7 +305,7 @@ int redisvFormatCommand(char **target, const char *format, va_list ap) {
const
char
*
c
=
format
;
const
char
*
c
=
format
;
char
*
cmd
=
NULL
;
/* final command */
char
*
cmd
=
NULL
;
/* final command */
int
pos
;
/* position in final command */
int
pos
;
/* position in final command */
sds
curarg
,
newarg
;
/* current argument */
hi
sds
curarg
,
newarg
;
/* current argument */
int
touched
=
0
;
/* was the current argument touched? */
int
touched
=
0
;
/* was the current argument touched? */
char
**
curargv
=
NULL
,
**
newargv
=
NULL
;
char
**
curargv
=
NULL
,
**
newargv
=
NULL
;
int
argc
=
0
;
int
argc
=
0
;
...
@@ -318,7 +318,7 @@ int redisvFormatCommand(char **target, const char *format, va_list ap) {
...
@@ -318,7 +318,7 @@ int redisvFormatCommand(char **target, const char *format, va_list ap) {
return
-
1
;
return
-
1
;
/* Build the command string accordingly to protocol */
/* Build the command string accordingly to protocol */
curarg
=
sdsempty
();
curarg
=
hi_
sdsempty
();
if
(
curarg
==
NULL
)
if
(
curarg
==
NULL
)
return
-
1
;
return
-
1
;
...
@@ -330,15 +330,15 @@ int redisvFormatCommand(char **target, const char *format, va_list ap) {
...
@@ -330,15 +330,15 @@ int redisvFormatCommand(char **target, const char *format, va_list ap) {
if
(
newargv
==
NULL
)
goto
memory_err
;
if
(
newargv
==
NULL
)
goto
memory_err
;
curargv
=
newargv
;
curargv
=
newargv
;
curargv
[
argc
++
]
=
curarg
;
curargv
[
argc
++
]
=
curarg
;
totlen
+=
bulklen
(
sdslen
(
curarg
));
totlen
+=
bulklen
(
hi_
sdslen
(
curarg
));
/* curarg is put in argv so it can be overwritten. */
/* curarg is put in argv so it can be overwritten. */
curarg
=
sdsempty
();
curarg
=
hi_
sdsempty
();
if
(
curarg
==
NULL
)
goto
memory_err
;
if
(
curarg
==
NULL
)
goto
memory_err
;
touched
=
0
;
touched
=
0
;
}
}
}
else
{
}
else
{
newarg
=
sdscatlen
(
curarg
,
c
,
1
);
newarg
=
hi_
sdscatlen
(
curarg
,
c
,
1
);
if
(
newarg
==
NULL
)
goto
memory_err
;
if
(
newarg
==
NULL
)
goto
memory_err
;
curarg
=
newarg
;
curarg
=
newarg
;
touched
=
1
;
touched
=
1
;
...
@@ -355,16 +355,16 @@ int redisvFormatCommand(char **target, const char *format, va_list ap) {
...
@@ -355,16 +355,16 @@ int redisvFormatCommand(char **target, const char *format, va_list ap) {
arg
=
va_arg
(
ap
,
char
*
);
arg
=
va_arg
(
ap
,
char
*
);
size
=
strlen
(
arg
);
size
=
strlen
(
arg
);
if
(
size
>
0
)
if
(
size
>
0
)
newarg
=
sdscatlen
(
curarg
,
arg
,
size
);
newarg
=
hi_
sdscatlen
(
curarg
,
arg
,
size
);
break
;
break
;
case
'b'
:
case
'b'
:
arg
=
va_arg
(
ap
,
char
*
);
arg
=
va_arg
(
ap
,
char
*
);
size
=
va_arg
(
ap
,
size_t
);
size
=
va_arg
(
ap
,
size_t
);
if
(
size
>
0
)
if
(
size
>
0
)
newarg
=
sdscatlen
(
curarg
,
arg
,
size
);
newarg
=
hi_
sdscatlen
(
curarg
,
arg
,
size
);
break
;
break
;
case
'%'
:
case
'%'
:
newarg
=
sdscat
(
curarg
,
"%"
);
newarg
=
hi_
sdscat
(
curarg
,
"%"
);
break
;
break
;
default:
default:
/* Try to detect printf format */
/* Try to detect printf format */
...
@@ -452,7 +452,7 @@ int redisvFormatCommand(char **target, const char *format, va_list ap) {
...
@@ -452,7 +452,7 @@ int redisvFormatCommand(char **target, const char *format, va_list ap) {
if
(
_l
<
sizeof
(
_format
)
-
2
)
{
if
(
_l
<
sizeof
(
_format
)
-
2
)
{
memcpy
(
_format
,
c
,
_l
);
memcpy
(
_format
,
c
,
_l
);
_format
[
_l
]
=
'\0'
;
_format
[
_l
]
=
'\0'
;
newarg
=
sdscatvprintf
(
curarg
,
_format
,
_cpy
);
newarg
=
hi_
sdscatvprintf
(
curarg
,
_format
,
_cpy
);
/* Update current position (note: outer blocks
/* Update current position (note: outer blocks
* increment c twice so compensate here) */
* increment c twice so compensate here) */
...
@@ -479,9 +479,9 @@ int redisvFormatCommand(char **target, const char *format, va_list ap) {
...
@@ -479,9 +479,9 @@ int redisvFormatCommand(char **target, const char *format, va_list ap) {
if
(
newargv
==
NULL
)
goto
memory_err
;
if
(
newargv
==
NULL
)
goto
memory_err
;
curargv
=
newargv
;
curargv
=
newargv
;
curargv
[
argc
++
]
=
curarg
;
curargv
[
argc
++
]
=
curarg
;
totlen
+=
bulklen
(
sdslen
(
curarg
));
totlen
+=
bulklen
(
hi_
sdslen
(
curarg
));
}
else
{
}
else
{
sdsfree
(
curarg
);
hi_
sdsfree
(
curarg
);
}
}
/* Clear curarg because it was put in curargv or was free'd. */
/* Clear curarg because it was put in curargv or was free'd. */
...
@@ -496,10 +496,10 @@ int redisvFormatCommand(char **target, const char *format, va_list ap) {
...
@@ -496,10 +496,10 @@ int redisvFormatCommand(char **target, const char *format, va_list ap) {
pos
=
sprintf
(
cmd
,
"*%d
\r\n
"
,
argc
);
pos
=
sprintf
(
cmd
,
"*%d
\r\n
"
,
argc
);
for
(
j
=
0
;
j
<
argc
;
j
++
)
{
for
(
j
=
0
;
j
<
argc
;
j
++
)
{
pos
+=
sprintf
(
cmd
+
pos
,
"$%zu
\r\n
"
,
sdslen
(
curargv
[
j
]));
pos
+=
sprintf
(
cmd
+
pos
,
"$%zu
\r\n
"
,
hi_
sdslen
(
curargv
[
j
]));
memcpy
(
cmd
+
pos
,
curargv
[
j
],
sdslen
(
curargv
[
j
]));
memcpy
(
cmd
+
pos
,
curargv
[
j
],
hi_
sdslen
(
curargv
[
j
]));
pos
+=
sdslen
(
curargv
[
j
]);
pos
+=
hi_
sdslen
(
curargv
[
j
]);
sdsfree
(
curargv
[
j
]);
hi_
sdsfree
(
curargv
[
j
]);
cmd
[
pos
++
]
=
'\r'
;
cmd
[
pos
++
]
=
'\r'
;
cmd
[
pos
++
]
=
'\n'
;
cmd
[
pos
++
]
=
'\n'
;
}
}
...
@@ -521,11 +521,11 @@ memory_err:
...
@@ -521,11 +521,11 @@ memory_err:
cleanup:
cleanup:
if
(
curargv
)
{
if
(
curargv
)
{
while
(
argc
--
)
while
(
argc
--
)
sdsfree
(
curargv
[
argc
]);
hi_
sdsfree
(
curargv
[
argc
]);
hi_free
(
curargv
);
hi_free
(
curargv
);
}
}
sdsfree
(
curarg
);
hi_
sdsfree
(
curarg
);
hi_free
(
cmd
);
hi_free
(
cmd
);
return
error_type
;
return
error_type
;
...
@@ -558,16 +558,16 @@ int redisFormatCommand(char **target, const char *format, ...) {
...
@@ -558,16 +558,16 @@ int redisFormatCommand(char **target, const char *format, ...) {
return
len
;
return
len
;
}
}
/* Format a command according to the Redis protocol using an sds string and
/* Format a command according to the Redis protocol using an
hi
sds string and
* sdscatfmt for the processing of arguments. This function takes the
*
hi_
sdscatfmt for the processing of arguments. This function takes the
* number of arguments, an array with arguments and an array with their
* number of arguments, an array with arguments and an array with their
* lengths. If the latter is set to NULL, strlen will be used to compute the
* lengths. If the latter is set to NULL, strlen will be used to compute the
* argument lengths.
* argument lengths.
*/
*/
int
redisFormatSdsCommandArgv
(
sds
*
target
,
int
argc
,
const
char
**
argv
,
int
redisFormatSdsCommandArgv
(
hi
sds
*
target
,
int
argc
,
const
char
**
argv
,
const
size_t
*
argvlen
)
const
size_t
*
argvlen
)
{
{
sds
cmd
,
aux
;
hi
sds
cmd
,
aux
;
unsigned
long
long
totlen
;
unsigned
long
long
totlen
;
int
j
;
int
j
;
size_t
len
;
size_t
len
;
...
@@ -584,36 +584,36 @@ int redisFormatSdsCommandArgv(sds *target, int argc, const char **argv,
...
@@ -584,36 +584,36 @@ int redisFormatSdsCommandArgv(sds *target, int argc, const char **argv,
}
}
/* Use an SDS string for command construction */
/* Use an SDS string for command construction */
cmd
=
sdsempty
();
cmd
=
hi_
sdsempty
();
if
(
cmd
==
NULL
)
if
(
cmd
==
NULL
)
return
-
1
;
return
-
1
;
/* We already know how much storage we need */
/* We already know how much storage we need */
aux
=
sdsMakeRoomFor
(
cmd
,
totlen
);
aux
=
hi_
sdsMakeRoomFor
(
cmd
,
totlen
);
if
(
aux
==
NULL
)
{
if
(
aux
==
NULL
)
{
sdsfree
(
cmd
);
hi_
sdsfree
(
cmd
);
return
-
1
;
return
-
1
;
}
}
cmd
=
aux
;
cmd
=
aux
;
/* Construct command */
/* Construct command */
cmd
=
sdscatfmt
(
cmd
,
"*%i
\r\n
"
,
argc
);
cmd
=
hi_
sdscatfmt
(
cmd
,
"*%i
\r\n
"
,
argc
);
for
(
j
=
0
;
j
<
argc
;
j
++
)
{
for
(
j
=
0
;
j
<
argc
;
j
++
)
{
len
=
argvlen
?
argvlen
[
j
]
:
strlen
(
argv
[
j
]);
len
=
argvlen
?
argvlen
[
j
]
:
strlen
(
argv
[
j
]);
cmd
=
sdscatfmt
(
cmd
,
"$%u
\r\n
"
,
len
);
cmd
=
hi_
sdscatfmt
(
cmd
,
"$%u
\r\n
"
,
len
);
cmd
=
sdscatlen
(
cmd
,
argv
[
j
],
len
);
cmd
=
hi_
sdscatlen
(
cmd
,
argv
[
j
],
len
);
cmd
=
sdscatlen
(
cmd
,
"
\r\n
"
,
sizeof
(
"
\r\n
"
)
-
1
);
cmd
=
hi_
sdscatlen
(
cmd
,
"
\r\n
"
,
sizeof
(
"
\r\n
"
)
-
1
);
}
}
assert
(
sdslen
(
cmd
)
==
totlen
);
assert
(
hi_
sdslen
(
cmd
)
==
totlen
);
*
target
=
cmd
;
*
target
=
cmd
;
return
totlen
;
return
totlen
;
}
}
void
redisFreeSdsCommand
(
sds
cmd
)
{
void
redisFreeSdsCommand
(
hi
sds
cmd
)
{
sdsfree
(
cmd
);
hi_
sdsfree
(
cmd
);
}
}
/* Format a command according to the Redis protocol. This function takes the
/* Format a command according to the Redis protocol. This function takes the
...
@@ -697,7 +697,7 @@ static redisContext *redisContextInit(void) {
...
@@ -697,7 +697,7 @@ static redisContext *redisContextInit(void) {
c
->
funcs
=
&
redisContextDefaultFuncs
;
c
->
funcs
=
&
redisContextDefaultFuncs
;
c
->
obuf
=
sdsempty
();
c
->
obuf
=
hi_
sdsempty
();
c
->
reader
=
redisReaderCreate
();
c
->
reader
=
redisReaderCreate
();
c
->
fd
=
REDIS_INVALID_FD
;
c
->
fd
=
REDIS_INVALID_FD
;
...
@@ -714,7 +714,7 @@ void redisFree(redisContext *c) {
...
@@ -714,7 +714,7 @@ void redisFree(redisContext *c) {
return
;
return
;
redisNetClose
(
c
);
redisNetClose
(
c
);
sdsfree
(
c
->
obuf
);
hi_
sdsfree
(
c
->
obuf
);
redisReaderFree
(
c
->
reader
);
redisReaderFree
(
c
->
reader
);
hi_free
(
c
->
tcp
.
host
);
hi_free
(
c
->
tcp
.
host
);
hi_free
(
c
->
tcp
.
source_addr
);
hi_free
(
c
->
tcp
.
source_addr
);
...
@@ -751,10 +751,10 @@ int redisReconnect(redisContext *c) {
...
@@ -751,10 +751,10 @@ int redisReconnect(redisContext *c) {
redisNetClose
(
c
);
redisNetClose
(
c
);
sdsfree
(
c
->
obuf
);
hi_
sdsfree
(
c
->
obuf
);
redisReaderFree
(
c
->
reader
);
redisReaderFree
(
c
->
reader
);
c
->
obuf
=
sdsempty
();
c
->
obuf
=
hi_
sdsempty
();
c
->
reader
=
redisReaderCreate
();
c
->
reader
=
redisReaderCreate
();
if
(
c
->
obuf
==
NULL
||
c
->
reader
==
NULL
)
{
if
(
c
->
obuf
==
NULL
||
c
->
reader
==
NULL
)
{
...
@@ -965,22 +965,22 @@ int redisBufferWrite(redisContext *c, int *done) {
...
@@ -965,22 +965,22 @@ int redisBufferWrite(redisContext *c, int *done) {
if
(
c
->
err
)
if
(
c
->
err
)
return
REDIS_ERR
;
return
REDIS_ERR
;
if
(
sdslen
(
c
->
obuf
)
>
0
)
{
if
(
hi_
sdslen
(
c
->
obuf
)
>
0
)
{
ssize_t
nwritten
=
c
->
funcs
->
write
(
c
);
ssize_t
nwritten
=
c
->
funcs
->
write
(
c
);
if
(
nwritten
<
0
)
{
if
(
nwritten
<
0
)
{
return
REDIS_ERR
;
return
REDIS_ERR
;
}
else
if
(
nwritten
>
0
)
{
}
else
if
(
nwritten
>
0
)
{
if
(
nwritten
==
(
ssize_t
)
sdslen
(
c
->
obuf
))
{
if
(
nwritten
==
(
ssize_t
)
hi_
sdslen
(
c
->
obuf
))
{
sdsfree
(
c
->
obuf
);
hi_
sdsfree
(
c
->
obuf
);
c
->
obuf
=
sdsempty
();
c
->
obuf
=
hi_
sdsempty
();
if
(
c
->
obuf
==
NULL
)
if
(
c
->
obuf
==
NULL
)
goto
oom
;
goto
oom
;
}
else
{
}
else
{
if
(
sdsrange
(
c
->
obuf
,
nwritten
,
-
1
)
<
0
)
goto
oom
;
if
(
hi_
sdsrange
(
c
->
obuf
,
nwritten
,
-
1
)
<
0
)
goto
oom
;
}
}
}
}
}
}
if
(
done
!=
NULL
)
*
done
=
(
sdslen
(
c
->
obuf
)
==
0
);
if
(
done
!=
NULL
)
*
done
=
(
hi_
sdslen
(
c
->
obuf
)
==
0
);
return
REDIS_OK
;
return
REDIS_OK
;
oom:
oom:
...
@@ -1058,9 +1058,9 @@ int redisGetReply(redisContext *c, void **reply) {
...
@@ -1058,9 +1058,9 @@ int redisGetReply(redisContext *c, void **reply) {
* the reply (or replies in pub/sub).
* the reply (or replies in pub/sub).
*/
*/
int
__redisAppendCommand
(
redisContext
*
c
,
const
char
*
cmd
,
size_t
len
)
{
int
__redisAppendCommand
(
redisContext
*
c
,
const
char
*
cmd
,
size_t
len
)
{
sds
newbuf
;
hi
sds
newbuf
;
newbuf
=
sdscatlen
(
c
->
obuf
,
cmd
,
len
);
newbuf
=
hi_
sdscatlen
(
c
->
obuf
,
cmd
,
len
);
if
(
newbuf
==
NULL
)
{
if
(
newbuf
==
NULL
)
{
__redisSetError
(
c
,
REDIS_ERR_OOM
,
"Out of memory"
);
__redisSetError
(
c
,
REDIS_ERR_OOM
,
"Out of memory"
);
return
REDIS_ERR
;
return
REDIS_ERR
;
...
@@ -1112,7 +1112,7 @@ int redisAppendCommand(redisContext *c, const char *format, ...) {
...
@@ -1112,7 +1112,7 @@ int redisAppendCommand(redisContext *c, const char *format, ...) {
}
}
int
redisAppendCommandArgv
(
redisContext
*
c
,
int
argc
,
const
char
**
argv
,
const
size_t
*
argvlen
)
{
int
redisAppendCommandArgv
(
redisContext
*
c
,
int
argc
,
const
char
**
argv
,
const
size_t
*
argvlen
)
{
sds
cmd
;
hi
sds
cmd
;
int
len
;
int
len
;
len
=
redisFormatSdsCommandArgv
(
&
cmd
,
argc
,
argv
,
argvlen
);
len
=
redisFormatSdsCommandArgv
(
&
cmd
,
argc
,
argv
,
argvlen
);
...
@@ -1122,11 +1122,11 @@ int redisAppendCommandArgv(redisContext *c, int argc, const char **argv, const s
...
@@ -1122,11 +1122,11 @@ int redisAppendCommandArgv(redisContext *c, int argc, const char **argv, const s
}
}
if
(
__redisAppendCommand
(
c
,
cmd
,
len
)
!=
REDIS_OK
)
{
if
(
__redisAppendCommand
(
c
,
cmd
,
len
)
!=
REDIS_OK
)
{
sdsfree
(
cmd
);
hi_
sdsfree
(
cmd
);
return
REDIS_ERR
;
return
REDIS_ERR
;
}
}
sdsfree
(
cmd
);
hi_
sdsfree
(
cmd
);
return
REDIS_OK
;
return
REDIS_OK
;
}
}
...
...
deps/hiredis/hiredis.h
View file @
6866158f
...
@@ -42,7 +42,7 @@ struct timeval; /* forward declaration */
...
@@ -42,7 +42,7 @@ struct timeval; /* forward declaration */
typedef
long
long
ssize_t
;
typedef
long
long
ssize_t
;
#endif
#endif
#include <stdint.h>
/* uintXX_t, etc */
#include <stdint.h>
/* uintXX_t, etc */
#include "sds.h"
/* for sds */
#include "sds.h"
/* for
hi
sds */
#include "alloc.h"
/* for allocation wrappers */
#include "alloc.h"
/* for allocation wrappers */
#define HIREDIS_MAJOR 1
#define HIREDIS_MAJOR 1
...
@@ -128,9 +128,9 @@ void freeReplyObject(void *reply);
...
@@ -128,9 +128,9 @@ void freeReplyObject(void *reply);
int
redisvFormatCommand
(
char
**
target
,
const
char
*
format
,
va_list
ap
);
int
redisvFormatCommand
(
char
**
target
,
const
char
*
format
,
va_list
ap
);
int
redisFormatCommand
(
char
**
target
,
const
char
*
format
,
...);
int
redisFormatCommand
(
char
**
target
,
const
char
*
format
,
...);
int
redisFormatCommandArgv
(
char
**
target
,
int
argc
,
const
char
**
argv
,
const
size_t
*
argvlen
);
int
redisFormatCommandArgv
(
char
**
target
,
int
argc
,
const
char
**
argv
,
const
size_t
*
argvlen
);
int
redisFormatSdsCommandArgv
(
sds
*
target
,
int
argc
,
const
char
**
argv
,
const
size_t
*
argvlen
);
int
redisFormatSdsCommandArgv
(
hi
sds
*
target
,
int
argc
,
const
char
**
argv
,
const
size_t
*
argvlen
);
void
redisFreeCommand
(
char
*
cmd
);
void
redisFreeCommand
(
char
*
cmd
);
void
redisFreeSdsCommand
(
sds
cmd
);
void
redisFreeSdsCommand
(
hi
sds
cmd
);
enum
redisConnectionType
{
enum
redisConnectionType
{
REDIS_CONN_TCP
,
REDIS_CONN_TCP
,
...
...
deps/hiredis/net.c
View file @
6866158f
...
@@ -80,7 +80,7 @@ ssize_t redisNetRead(redisContext *c, char *buf, size_t bufcap) {
...
@@ -80,7 +80,7 @@ ssize_t redisNetRead(redisContext *c, char *buf, size_t bufcap) {
}
}
ssize_t
redisNetWrite
(
redisContext
*
c
)
{
ssize_t
redisNetWrite
(
redisContext
*
c
)
{
ssize_t
nwritten
=
send
(
c
->
fd
,
c
->
obuf
,
sdslen
(
c
->
obuf
),
0
);
ssize_t
nwritten
=
send
(
c
->
fd
,
c
->
obuf
,
hi_
sdslen
(
c
->
obuf
),
0
);
if
(
nwritten
<
0
)
{
if
(
nwritten
<
0
)
{
if
((
errno
==
EWOULDBLOCK
&&
!
(
c
->
flags
&
REDIS_BLOCK
))
||
(
errno
==
EINTR
))
{
if
((
errno
==
EWOULDBLOCK
&&
!
(
c
->
flags
&
REDIS_BLOCK
))
||
(
errno
==
EINTR
))
{
/* Try again later */
/* Try again later */
...
...
deps/hiredis/read.c
View file @
6866158f
...
@@ -59,7 +59,7 @@ static void __redisReaderSetError(redisReader *r, int type, const char *str) {
...
@@ -59,7 +59,7 @@ static void __redisReaderSetError(redisReader *r, int type, const char *str) {
}
}
/* Clear input buffer on errors. */
/* Clear input buffer on errors. */
sdsfree
(
r
->
buf
);
hi_
sdsfree
(
r
->
buf
);
r
->
buf
=
NULL
;
r
->
buf
=
NULL
;
r
->
pos
=
r
->
len
=
0
;
r
->
pos
=
r
->
len
=
0
;
...
@@ -609,7 +609,7 @@ redisReader *redisReaderCreateWithFunctions(redisReplyObjectFunctions *fn) {
...
@@ -609,7 +609,7 @@ redisReader *redisReaderCreateWithFunctions(redisReplyObjectFunctions *fn) {
if
(
r
==
NULL
)
if
(
r
==
NULL
)
return
NULL
;
return
NULL
;
r
->
buf
=
sdsempty
();
r
->
buf
=
hi_
sdsempty
();
if
(
r
->
buf
==
NULL
)
if
(
r
->
buf
==
NULL
)
goto
oom
;
goto
oom
;
...
@@ -650,12 +650,12 @@ void redisReaderFree(redisReader *r) {
...
@@ -650,12 +650,12 @@ void redisReaderFree(redisReader *r) {
hi_free
(
r
->
task
);
hi_free
(
r
->
task
);
}
}
sdsfree
(
r
->
buf
);
hi_
sdsfree
(
r
->
buf
);
hi_free
(
r
);
hi_free
(
r
);
}
}
int
redisReaderFeed
(
redisReader
*
r
,
const
char
*
buf
,
size_t
len
)
{
int
redisReaderFeed
(
redisReader
*
r
,
const
char
*
buf
,
size_t
len
)
{
sds
newbuf
;
hi
sds
newbuf
;
/* Return early when this reader is in an erroneous state. */
/* Return early when this reader is in an erroneous state. */
if
(
r
->
err
)
if
(
r
->
err
)
...
@@ -664,19 +664,19 @@ int redisReaderFeed(redisReader *r, const char *buf, size_t len) {
...
@@ -664,19 +664,19 @@ int redisReaderFeed(redisReader *r, const char *buf, size_t len) {
/* Copy the provided buffer. */
/* Copy the provided buffer. */
if
(
buf
!=
NULL
&&
len
>=
1
)
{
if
(
buf
!=
NULL
&&
len
>=
1
)
{
/* Destroy internal buffer when it is empty and is quite large. */
/* Destroy internal buffer when it is empty and is quite large. */
if
(
r
->
len
==
0
&&
r
->
maxbuf
!=
0
&&
sdsavail
(
r
->
buf
)
>
r
->
maxbuf
)
{
if
(
r
->
len
==
0
&&
r
->
maxbuf
!=
0
&&
hi_
sdsavail
(
r
->
buf
)
>
r
->
maxbuf
)
{
sdsfree
(
r
->
buf
);
hi_
sdsfree
(
r
->
buf
);
r
->
buf
=
sdsempty
();
r
->
buf
=
hi_
sdsempty
();
if
(
r
->
buf
==
0
)
goto
oom
;
if
(
r
->
buf
==
0
)
goto
oom
;
r
->
pos
=
0
;
r
->
pos
=
0
;
}
}
newbuf
=
sdscatlen
(
r
->
buf
,
buf
,
len
);
newbuf
=
hi_
sdscatlen
(
r
->
buf
,
buf
,
len
);
if
(
newbuf
==
NULL
)
goto
oom
;
if
(
newbuf
==
NULL
)
goto
oom
;
r
->
buf
=
newbuf
;
r
->
buf
=
newbuf
;
r
->
len
=
sdslen
(
r
->
buf
);
r
->
len
=
hi_
sdslen
(
r
->
buf
);
}
}
return
REDIS_OK
;
return
REDIS_OK
;
...
@@ -721,9 +721,9 @@ int redisReaderGetReply(redisReader *r, void **reply) {
...
@@ -721,9 +721,9 @@ int redisReaderGetReply(redisReader *r, void **reply) {
/* Discard part of the buffer when we've consumed at least 1k, to avoid
/* Discard part of the buffer when we've consumed at least 1k, to avoid
* doing unnecessary calls to memmove() in sds.c. */
* doing unnecessary calls to memmove() in sds.c. */
if
(
r
->
pos
>=
1024
)
{
if
(
r
->
pos
>=
1024
)
{
if
(
sdsrange
(
r
->
buf
,
r
->
pos
,
-
1
)
<
0
)
return
REDIS_ERR
;
if
(
hi_
sdsrange
(
r
->
buf
,
r
->
pos
,
-
1
)
<
0
)
return
REDIS_ERR
;
r
->
pos
=
0
;
r
->
pos
=
0
;
r
->
len
=
sdslen
(
r
->
buf
);
r
->
len
=
hi_
sdslen
(
r
->
buf
);
}
}
/* Emit a reply when there is one. */
/* Emit a reply when there is one. */
...
...
deps/hiredis/sds.c
View file @
6866158f
This diff is collapsed.
Click to expand it.
deps/hiredis/sds.h
View file @
6866158f
...
@@ -30,10 +30,10 @@
...
@@ -30,10 +30,10 @@
* POSSIBILITY OF SUCH DAMAGE.
* POSSIBILITY OF SUCH DAMAGE.
*/
*/
#ifndef
_
_SDS_H
#ifndef
HIREDIS
_SDS_H
#define
_
_SDS_H
#define
HIREDIS
_SDS_H
#define SDS_MAX_PREALLOC (1024*1024)
#define
HI_
SDS_MAX_PREALLOC (1024*1024)
#ifdef _MSC_VER
#ifdef _MSC_VER
#define __attribute__(x)
#define __attribute__(x)
typedef
long
long
ssize_t
;
typedef
long
long
ssize_t
;
...
@@ -44,235 +44,235 @@ typedef long long ssize_t;
...
@@ -44,235 +44,235 @@ typedef long long ssize_t;
#include <stdarg.h>
#include <stdarg.h>
#include <stdint.h>
#include <stdint.h>
typedef
char
*
sds
;
typedef
char
*
hi
sds
;
/* Note: sdshdr5 is never used, we just access the flags byte directly.
/* Note: sdshdr5 is never used, we just access the flags byte directly.
* However is here to document the layout of type 5 SDS strings. */
* However is here to document the layout of type 5 SDS strings. */
struct
__attribute__
((
__packed__
))
sdshdr5
{
struct
__attribute__
((
__packed__
))
hi
sdshdr5
{
unsigned
char
flags
;
/* 3 lsb of type, and 5 msb of string length */
unsigned
char
flags
;
/* 3 lsb of type, and 5 msb of string length */
char
buf
[];
char
buf
[];
};
};
struct
__attribute__
((
__packed__
))
sdshdr8
{
struct
__attribute__
((
__packed__
))
hi
sdshdr8
{
uint8_t
len
;
/* used */
uint8_t
len
;
/* used */
uint8_t
alloc
;
/* excluding the header and null terminator */
uint8_t
alloc
;
/* excluding the header and null terminator */
unsigned
char
flags
;
/* 3 lsb of type, 5 unused bits */
unsigned
char
flags
;
/* 3 lsb of type, 5 unused bits */
char
buf
[];
char
buf
[];
};
};
struct
__attribute__
((
__packed__
))
sdshdr16
{
struct
__attribute__
((
__packed__
))
hi
sdshdr16
{
uint16_t
len
;
/* used */
uint16_t
len
;
/* used */
uint16_t
alloc
;
/* excluding the header and null terminator */
uint16_t
alloc
;
/* excluding the header and null terminator */
unsigned
char
flags
;
/* 3 lsb of type, 5 unused bits */
unsigned
char
flags
;
/* 3 lsb of type, 5 unused bits */
char
buf
[];
char
buf
[];
};
};
struct
__attribute__
((
__packed__
))
sdshdr32
{
struct
__attribute__
((
__packed__
))
hi
sdshdr32
{
uint32_t
len
;
/* used */
uint32_t
len
;
/* used */
uint32_t
alloc
;
/* excluding the header and null terminator */
uint32_t
alloc
;
/* excluding the header and null terminator */
unsigned
char
flags
;
/* 3 lsb of type, 5 unused bits */
unsigned
char
flags
;
/* 3 lsb of type, 5 unused bits */
char
buf
[];
char
buf
[];
};
};
struct
__attribute__
((
__packed__
))
sdshdr64
{
struct
__attribute__
((
__packed__
))
hi
sdshdr64
{
uint64_t
len
;
/* used */
uint64_t
len
;
/* used */
uint64_t
alloc
;
/* excluding the header and null terminator */
uint64_t
alloc
;
/* excluding the header and null terminator */
unsigned
char
flags
;
/* 3 lsb of type, 5 unused bits */
unsigned
char
flags
;
/* 3 lsb of type, 5 unused bits */
char
buf
[];
char
buf
[];
};
};
#define SDS_TYPE_5 0
#define
HI_
SDS_TYPE_5 0
#define SDS_TYPE_8 1
#define
HI_
SDS_TYPE_8 1
#define SDS_TYPE_16 2
#define
HI_
SDS_TYPE_16 2
#define SDS_TYPE_32 3
#define
HI_
SDS_TYPE_32 3
#define SDS_TYPE_64 4
#define
HI_
SDS_TYPE_64 4
#define SDS_TYPE_MASK 7
#define
HI_
SDS_TYPE_MASK 7
#define SDS_TYPE_BITS 3
#define
HI_
SDS_TYPE_BITS 3
#define SDS_HDR_VAR(T,s) struct sdshdr##T *sh = (struct sdshdr##T *)((s)-(sizeof(struct sdshdr##T)));
#define
HI_
SDS_HDR_VAR(T,s) struct
hi
sdshdr##T *sh = (struct
hi
sdshdr##T *)((s)-(sizeof(struct
hi
sdshdr##T)));
#define SDS_HDR(T,s) ((struct sdshdr##T *)((s)-(sizeof(struct sdshdr##T))))
#define
HI_
SDS_HDR(T,s) ((struct
hi
sdshdr##T *)((s)-(sizeof(struct
hi
sdshdr##T))))
#define SDS_TYPE_5_LEN(f) ((f)>>SDS_TYPE_BITS)
#define
HI_
SDS_TYPE_5_LEN(f) ((f)>>
HI_
SDS_TYPE_BITS)
static
inline
size_t
sdslen
(
const
sds
s
)
{
static
inline
size_t
hi_
sdslen
(
const
hi
sds
s
)
{
unsigned
char
flags
=
s
[
-
1
];
unsigned
char
flags
=
s
[
-
1
];
switch
(
flags
&
SDS_TYPE_MASK
)
{
switch
(
flags
&
HI_
SDS_TYPE_MASK
)
{
case
SDS_TYPE_5
:
case
HI_
SDS_TYPE_5
:
return
SDS_TYPE_5_LEN
(
flags
);
return
HI_
SDS_TYPE_5_LEN
(
flags
);
case
SDS_TYPE_8
:
case
HI_
SDS_TYPE_8
:
return
SDS_HDR
(
8
,
s
)
->
len
;
return
HI_
SDS_HDR
(
8
,
s
)
->
len
;
case
SDS_TYPE_16
:
case
HI_
SDS_TYPE_16
:
return
SDS_HDR
(
16
,
s
)
->
len
;
return
HI_
SDS_HDR
(
16
,
s
)
->
len
;
case
SDS_TYPE_32
:
case
HI_
SDS_TYPE_32
:
return
SDS_HDR
(
32
,
s
)
->
len
;
return
HI_
SDS_HDR
(
32
,
s
)
->
len
;
case
SDS_TYPE_64
:
case
HI_
SDS_TYPE_64
:
return
SDS_HDR
(
64
,
s
)
->
len
;
return
HI_
SDS_HDR
(
64
,
s
)
->
len
;
}
}
return
0
;
return
0
;
}
}
static
inline
size_t
sdsavail
(
const
sds
s
)
{
static
inline
size_t
hi_
sdsavail
(
const
hi
sds
s
)
{
unsigned
char
flags
=
s
[
-
1
];
unsigned
char
flags
=
s
[
-
1
];
switch
(
flags
&
SDS_TYPE_MASK
)
{
switch
(
flags
&
HI_
SDS_TYPE_MASK
)
{
case
SDS_TYPE_5
:
{
case
HI_
SDS_TYPE_5
:
{
return
0
;
return
0
;
}
}
case
SDS_TYPE_8
:
{
case
HI_
SDS_TYPE_8
:
{
SDS_HDR_VAR
(
8
,
s
);
HI_
SDS_HDR_VAR
(
8
,
s
);
return
sh
->
alloc
-
sh
->
len
;
return
sh
->
alloc
-
sh
->
len
;
}
}
case
SDS_TYPE_16
:
{
case
HI_
SDS_TYPE_16
:
{
SDS_HDR_VAR
(
16
,
s
);
HI_
SDS_HDR_VAR
(
16
,
s
);
return
sh
->
alloc
-
sh
->
len
;
return
sh
->
alloc
-
sh
->
len
;
}
}
case
SDS_TYPE_32
:
{
case
HI_
SDS_TYPE_32
:
{
SDS_HDR_VAR
(
32
,
s
);
HI_
SDS_HDR_VAR
(
32
,
s
);
return
sh
->
alloc
-
sh
->
len
;
return
sh
->
alloc
-
sh
->
len
;
}
}
case
SDS_TYPE_64
:
{
case
HI_
SDS_TYPE_64
:
{
SDS_HDR_VAR
(
64
,
s
);
HI_
SDS_HDR_VAR
(
64
,
s
);
return
sh
->
alloc
-
sh
->
len
;
return
sh
->
alloc
-
sh
->
len
;
}
}
}
}
return
0
;
return
0
;
}
}
static
inline
void
sdssetlen
(
sds
s
,
size_t
newlen
)
{
static
inline
void
hi_
sdssetlen
(
hi
sds
s
,
size_t
newlen
)
{
unsigned
char
flags
=
s
[
-
1
];
unsigned
char
flags
=
s
[
-
1
];
switch
(
flags
&
SDS_TYPE_MASK
)
{
switch
(
flags
&
HI_
SDS_TYPE_MASK
)
{
case
SDS_TYPE_5
:
case
HI_
SDS_TYPE_5
:
{
{
unsigned
char
*
fp
=
((
unsigned
char
*
)
s
)
-
1
;
unsigned
char
*
fp
=
((
unsigned
char
*
)
s
)
-
1
;
*
fp
=
(
unsigned
char
)(
SDS_TYPE_5
|
(
newlen
<<
SDS_TYPE_BITS
));
*
fp
=
(
unsigned
char
)(
HI_
SDS_TYPE_5
|
(
newlen
<<
HI_
SDS_TYPE_BITS
));
}
}
break
;
break
;
case
SDS_TYPE_8
:
case
HI_
SDS_TYPE_8
:
SDS_HDR
(
8
,
s
)
->
len
=
(
uint8_t
)
newlen
;
HI_
SDS_HDR
(
8
,
s
)
->
len
=
(
uint8_t
)
newlen
;
break
;
break
;
case
SDS_TYPE_16
:
case
HI_
SDS_TYPE_16
:
SDS_HDR
(
16
,
s
)
->
len
=
(
uint16_t
)
newlen
;
HI_
SDS_HDR
(
16
,
s
)
->
len
=
(
uint16_t
)
newlen
;
break
;
break
;
case
SDS_TYPE_32
:
case
HI_
SDS_TYPE_32
:
SDS_HDR
(
32
,
s
)
->
len
=
(
uint32_t
)
newlen
;
HI_
SDS_HDR
(
32
,
s
)
->
len
=
(
uint32_t
)
newlen
;
break
;
break
;
case
SDS_TYPE_64
:
case
HI_
SDS_TYPE_64
:
SDS_HDR
(
64
,
s
)
->
len
=
(
uint64_t
)
newlen
;
HI_
SDS_HDR
(
64
,
s
)
->
len
=
(
uint64_t
)
newlen
;
break
;
break
;
}
}
}
}
static
inline
void
sdsinclen
(
sds
s
,
size_t
inc
)
{
static
inline
void
hi_
sdsinclen
(
hi
sds
s
,
size_t
inc
)
{
unsigned
char
flags
=
s
[
-
1
];
unsigned
char
flags
=
s
[
-
1
];
switch
(
flags
&
SDS_TYPE_MASK
)
{
switch
(
flags
&
HI_
SDS_TYPE_MASK
)
{
case
SDS_TYPE_5
:
case
HI_
SDS_TYPE_5
:
{
{
unsigned
char
*
fp
=
((
unsigned
char
*
)
s
)
-
1
;
unsigned
char
*
fp
=
((
unsigned
char
*
)
s
)
-
1
;
unsigned
char
newlen
=
SDS_TYPE_5_LEN
(
flags
)
+
(
unsigned
char
)
inc
;
unsigned
char
newlen
=
HI_
SDS_TYPE_5_LEN
(
flags
)
+
(
unsigned
char
)
inc
;
*
fp
=
SDS_TYPE_5
|
(
newlen
<<
SDS_TYPE_BITS
);
*
fp
=
HI_
SDS_TYPE_5
|
(
newlen
<<
HI_
SDS_TYPE_BITS
);
}
}
break
;
break
;
case
SDS_TYPE_8
:
case
HI_
SDS_TYPE_8
:
SDS_HDR
(
8
,
s
)
->
len
+=
(
uint8_t
)
inc
;
HI_
SDS_HDR
(
8
,
s
)
->
len
+=
(
uint8_t
)
inc
;
break
;
break
;
case
SDS_TYPE_16
:
case
HI_
SDS_TYPE_16
:
SDS_HDR
(
16
,
s
)
->
len
+=
(
uint16_t
)
inc
;
HI_
SDS_HDR
(
16
,
s
)
->
len
+=
(
uint16_t
)
inc
;
break
;
break
;
case
SDS_TYPE_32
:
case
HI_
SDS_TYPE_32
:
SDS_HDR
(
32
,
s
)
->
len
+=
(
uint32_t
)
inc
;
HI_
SDS_HDR
(
32
,
s
)
->
len
+=
(
uint32_t
)
inc
;
break
;
break
;
case
SDS_TYPE_64
:
case
HI_
SDS_TYPE_64
:
SDS_HDR
(
64
,
s
)
->
len
+=
(
uint64_t
)
inc
;
HI_
SDS_HDR
(
64
,
s
)
->
len
+=
(
uint64_t
)
inc
;
break
;
break
;
}
}
}
}
/* sdsalloc() = sdsavail() + sdslen() */
/*
hi_
sdsalloc() =
hi_
sdsavail() +
hi_
sdslen() */
static
inline
size_t
sdsalloc
(
const
sds
s
)
{
static
inline
size_t
hi_
sdsalloc
(
const
hi
sds
s
)
{
unsigned
char
flags
=
s
[
-
1
];
unsigned
char
flags
=
s
[
-
1
];
switch
(
flags
&
SDS_TYPE_MASK
)
{
switch
(
flags
&
HI_
SDS_TYPE_MASK
)
{
case
SDS_TYPE_5
:
case
HI_
SDS_TYPE_5
:
return
SDS_TYPE_5_LEN
(
flags
);
return
HI_
SDS_TYPE_5_LEN
(
flags
);
case
SDS_TYPE_8
:
case
HI_
SDS_TYPE_8
:
return
SDS_HDR
(
8
,
s
)
->
alloc
;
return
HI_
SDS_HDR
(
8
,
s
)
->
alloc
;
case
SDS_TYPE_16
:
case
HI_
SDS_TYPE_16
:
return
SDS_HDR
(
16
,
s
)
->
alloc
;
return
HI_
SDS_HDR
(
16
,
s
)
->
alloc
;
case
SDS_TYPE_32
:
case
HI_
SDS_TYPE_32
:
return
SDS_HDR
(
32
,
s
)
->
alloc
;
return
HI_
SDS_HDR
(
32
,
s
)
->
alloc
;
case
SDS_TYPE_64
:
case
HI_
SDS_TYPE_64
:
return
SDS_HDR
(
64
,
s
)
->
alloc
;
return
HI_
SDS_HDR
(
64
,
s
)
->
alloc
;
}
}
return
0
;
return
0
;
}
}
static
inline
void
sdssetalloc
(
sds
s
,
size_t
newlen
)
{
static
inline
void
hi_
sdssetalloc
(
hi
sds
s
,
size_t
newlen
)
{
unsigned
char
flags
=
s
[
-
1
];
unsigned
char
flags
=
s
[
-
1
];
switch
(
flags
&
SDS_TYPE_MASK
)
{
switch
(
flags
&
HI_
SDS_TYPE_MASK
)
{
case
SDS_TYPE_5
:
case
HI_
SDS_TYPE_5
:
/* Nothing to do, this type has no total allocation info. */
/* Nothing to do, this type has no total allocation info. */
break
;
break
;
case
SDS_TYPE_8
:
case
HI_
SDS_TYPE_8
:
SDS_HDR
(
8
,
s
)
->
alloc
=
(
uint8_t
)
newlen
;
HI_
SDS_HDR
(
8
,
s
)
->
alloc
=
(
uint8_t
)
newlen
;
break
;
break
;
case
SDS_TYPE_16
:
case
HI_
SDS_TYPE_16
:
SDS_HDR
(
16
,
s
)
->
alloc
=
(
uint16_t
)
newlen
;
HI_
SDS_HDR
(
16
,
s
)
->
alloc
=
(
uint16_t
)
newlen
;
break
;
break
;
case
SDS_TYPE_32
:
case
HI_
SDS_TYPE_32
:
SDS_HDR
(
32
,
s
)
->
alloc
=
(
uint32_t
)
newlen
;
HI_
SDS_HDR
(
32
,
s
)
->
alloc
=
(
uint32_t
)
newlen
;
break
;
break
;
case
SDS_TYPE_64
:
case
HI_
SDS_TYPE_64
:
SDS_HDR
(
64
,
s
)
->
alloc
=
(
uint64_t
)
newlen
;
HI_
SDS_HDR
(
64
,
s
)
->
alloc
=
(
uint64_t
)
newlen
;
break
;
break
;
}
}
}
}
sds
sdsnewlen
(
const
void
*
init
,
size_t
initlen
);
hi
sds
hi_
sdsnewlen
(
const
void
*
init
,
size_t
initlen
);
sds
sdsnew
(
const
char
*
init
);
hi
sds
hi_
sdsnew
(
const
char
*
init
);
sds
sdsempty
(
void
);
hi
sds
hi_
sdsempty
(
void
);
sds
sdsdup
(
const
sds
s
);
hi
sds
hi_
sdsdup
(
const
hi
sds
s
);
void
sdsfree
(
sds
s
);
void
hi_
sdsfree
(
hi
sds
s
);
sds
sdsgrowzero
(
sds
s
,
size_t
len
);
hi
sds
hi_
sdsgrowzero
(
hi
sds
s
,
size_t
len
);
sds
sdscatlen
(
sds
s
,
const
void
*
t
,
size_t
len
);
hi
sds
hi_
sdscatlen
(
hi
sds
s
,
const
void
*
t
,
size_t
len
);
sds
sdscat
(
sds
s
,
const
char
*
t
);
hi
sds
hi_
sdscat
(
hi
sds
s
,
const
char
*
t
);
sds
sdscatsds
(
sds
s
,
const
sds
t
);
hi
sds
hi_
sdscatsds
(
hi
sds
s
,
const
hi
sds
t
);
sds
sdscpylen
(
sds
s
,
const
char
*
t
,
size_t
len
);
hi
sds
hi_
sdscpylen
(
hi
sds
s
,
const
char
*
t
,
size_t
len
);
sds
sdscpy
(
sds
s
,
const
char
*
t
);
hi
sds
hi_
sdscpy
(
hi
sds
s
,
const
char
*
t
);
sds
sdscatvprintf
(
sds
s
,
const
char
*
fmt
,
va_list
ap
);
hi
sds
hi_
sdscatvprintf
(
hi
sds
s
,
const
char
*
fmt
,
va_list
ap
);
#ifdef __GNUC__
#ifdef __GNUC__
sds
sdscatprintf
(
sds
s
,
const
char
*
fmt
,
...)
hi
sds
hi_
sdscatprintf
(
hi
sds
s
,
const
char
*
fmt
,
...)
__attribute__
((
format
(
printf
,
2
,
3
)));
__attribute__
((
format
(
printf
,
2
,
3
)));
#else
#else
sds
sdscatprintf
(
sds
s
,
const
char
*
fmt
,
...);
hi
sds
hi_
sdscatprintf
(
hi
sds
s
,
const
char
*
fmt
,
...);
#endif
#endif
sds
sdscatfmt
(
sds
s
,
char
const
*
fmt
,
...);
hi
sds
hi_
sdscatfmt
(
hi
sds
s
,
char
const
*
fmt
,
...);
sds
sdstrim
(
sds
s
,
const
char
*
cset
);
hi
sds
hi_
sdstrim
(
hi
sds
s
,
const
char
*
cset
);
int
sdsrange
(
sds
s
,
ssize_t
start
,
ssize_t
end
);
int
hi_
sdsrange
(
hi
sds
s
,
ssize_t
start
,
ssize_t
end
);
void
sdsupdatelen
(
sds
s
);
void
hi_
sdsupdatelen
(
hi
sds
s
);
void
sdsclear
(
sds
s
);
void
hi_
sdsclear
(
hi
sds
s
);
int
sdscmp
(
const
sds
s1
,
const
sds
s2
);
int
hi_
sdscmp
(
const
hi
sds
s1
,
const
hi
sds
s2
);
sds
*
sdssplitlen
(
const
char
*
s
,
int
len
,
const
char
*
sep
,
int
seplen
,
int
*
count
);
hi
sds
*
hi_
sdssplitlen
(
const
char
*
s
,
int
len
,
const
char
*
sep
,
int
seplen
,
int
*
count
);
void
sdsfreesplitres
(
sds
*
tokens
,
int
count
);
void
hi_
sdsfreesplitres
(
hi
sds
*
tokens
,
int
count
);
void
sdstolower
(
sds
s
);
void
hi_
sdstolower
(
hi
sds
s
);
void
sdstoupper
(
sds
s
);
void
hi_
sdstoupper
(
hi
sds
s
);
sds
sdsfromlonglong
(
long
long
value
);
hi
sds
hi_
sdsfromlonglong
(
long
long
value
);
sds
sdscatrepr
(
sds
s
,
const
char
*
p
,
size_t
len
);
hi
sds
hi_
sdscatrepr
(
hi
sds
s
,
const
char
*
p
,
size_t
len
);
sds
*
sdssplitargs
(
const
char
*
line
,
int
*
argc
);
hi
sds
*
hi_
sdssplitargs
(
const
char
*
line
,
int
*
argc
);
sds
sdsmapchars
(
sds
s
,
const
char
*
from
,
const
char
*
to
,
size_t
setlen
);
hi
sds
hi_
sdsmapchars
(
hi
sds
s
,
const
char
*
from
,
const
char
*
to
,
size_t
setlen
);
sds
sdsjoin
(
char
**
argv
,
int
argc
,
char
*
sep
);
hi
sds
hi_
sdsjoin
(
char
**
argv
,
int
argc
,
char
*
sep
);
sds
sdsjoinsds
(
sds
*
argv
,
int
argc
,
const
char
*
sep
,
size_t
seplen
);
hi
sds
hi_
sdsjoinsds
(
hi
sds
*
argv
,
int
argc
,
const
char
*
sep
,
size_t
seplen
);
/* Low level functions exposed to the user API */
/* Low level functions exposed to the user API */
sds
sdsMakeRoomFor
(
sds
s
,
size_t
addlen
);
hi
sds
hi_
sdsMakeRoomFor
(
hi
sds
s
,
size_t
addlen
);
void
sdsIncrLen
(
sds
s
,
int
incr
);
void
hi_
sdsIncrLen
(
hi
sds
s
,
int
incr
);
sds
sdsRemoveFreeSpace
(
sds
s
);
hi
sds
hi_
sdsRemoveFreeSpace
(
hi
sds
s
);
size_t
sdsAllocSize
(
sds
s
);
size_t
hi_
sdsAllocSize
(
hi
sds
s
);
void
*
sdsAllocPtr
(
sds
s
);
void
*
hi_
sdsAllocPtr
(
hi
sds
s
);
/* Export the allocator used by SDS to the program using SDS.
/* Export the allocator used by SDS to the program using SDS.
* Sometimes the program SDS is linked to, may use a different set of
* Sometimes the program SDS is linked to, may use a different set of
* allocators, but may want to allocate or free things that SDS will
* allocators, but may want to allocate or free things that SDS will
* respectively free or allocate. */
* respectively free or allocate. */
void
*
sds_malloc
(
size_t
size
);
void
*
hi_
sds_malloc
(
size_t
size
);
void
*
sds_realloc
(
void
*
ptr
,
size_t
size
);
void
*
hi_
sds_realloc
(
void
*
ptr
,
size_t
size
);
void
sds_free
(
void
*
ptr
);
void
hi_
sds_free
(
void
*
ptr
);
#ifdef REDIS_TEST
#ifdef REDIS_TEST
int
sdsTest
(
int
argc
,
char
*
argv
[]);
int
hi_
sdsTest
(
int
argc
,
char
*
argv
[]);
#endif
#endif
#endif
#endif
/* HIREDIS_SDS_H */
deps/hiredis/sdsalloc.h
View file @
6866158f
...
@@ -39,6 +39,6 @@
...
@@ -39,6 +39,6 @@
#include "alloc.h"
#include "alloc.h"
#define s_malloc hi_malloc
#define
hi_
s_malloc hi_malloc
#define s_realloc hi_realloc
#define
hi_
s_realloc hi_realloc
#define s_free hi_free
#define
hi_
s_free hi_free
deps/hiredis/sdscompat.h
0 → 100644
View file @
6866158f
/*
* Copyright (c) 2020, Michael Grunder <michael dot grunder at gmail dot com>
*
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* * Neither the name of Redis nor the names of its contributors may be used
* to endorse or promote products derived from this software without
* specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
/*
* SDS compatibility header.
*
* This simple file maps sds types and calls to their unique hiredis symbol names.
* It's useful when we build Hiredis as a dependency of Redis and want to call
* Hiredis' sds symbols rather than the ones built into Redis, as the libraries
* have slightly diverged and could cause hard to track down ABI incompatibility
* bugs.
*
*/
#ifndef HIREDIS_SDS_COMPAT
#define HIREDIS_SDS_COMPAT
#define sds hisds
#define sdslen hi_sdslen
#define sdsavail hi_sdsavail
#define sdssetlen hi_sdssetlen
#define sdsinclen hi_sdsinclen
#define sdsalloc hi_sdsalloc
#define sdssetalloc hi_sdssetalloc
#define sdsAllocPtr hi_sdsAllocPtr
#define sdsAllocSize hi_sdsAllocSize
#define sdscat hi_sdscat
#define sdscatfmt hi_sdscatfmt
#define sdscatlen hi_sdscatlen
#define sdscatprintf hi_sdscatprintf
#define sdscatrepr hi_sdscatrepr
#define sdscatsds hi_sdscatsds
#define sdscatvprintf hi_sdscatvprintf
#define sdsclear hi_sdsclear
#define sdscmp hi_sdscmp
#define sdscpy hi_sdscpy
#define sdscpylen hi_sdscpylen
#define sdsdup hi_sdsdup
#define sdsempty hi_sdsempty
#define sds_free hi_sds_free
#define sdsfree hi_sdsfree
#define sdsfreesplitres hi_sdsfreesplitres
#define sdsfromlonglong hi_sdsfromlonglong
#define sdsgrowzero hi_sdsgrowzero
#define sdsIncrLen hi_sdsIncrLen
#define sdsjoin hi_sdsjoin
#define sdsjoinsds hi_sdsjoinsds
#define sdsll2str hi_sdsll2str
#define sdsMakeRoomFor hi_sdsMakeRoomFor
#define sds_malloc hi_sds_malloc
#define sdsmapchars hi_sdsmapchars
#define sdsnew hi_sdsnew
#define sdsnewlen hi_sdsnewlen
#define sdsrange hi_sdsrange
#define sds_realloc hi_sds_realloc
#define sdsRemoveFreeSpace hi_sdsRemoveFreeSpace
#define sdssplitargs hi_sdssplitargs
#define sdssplitlen hi_sdssplitlen
#define sdstolower hi_sdstolower
#define sdstoupper hi_sdstoupper
#define sdstrim hi_sdstrim
#define sdsull2str hi_sdsull2str
#define sdsupdatelen hi_sdsupdatelen
#endif
/* HIREDIS_SDS_COMPAT */
deps/hiredis/ssl.c
View file @
6866158f
...
@@ -437,7 +437,7 @@ static ssize_t redisSSLRead(redisContext *c, char *buf, size_t bufcap) {
...
@@ -437,7 +437,7 @@ static ssize_t redisSSLRead(redisContext *c, char *buf, size_t bufcap) {
static
ssize_t
redisSSLWrite
(
redisContext
*
c
)
{
static
ssize_t
redisSSLWrite
(
redisContext
*
c
)
{
redisSSL
*
rssl
=
c
->
privctx
;
redisSSL
*
rssl
=
c
->
privctx
;
size_t
len
=
rssl
->
lastLen
?
rssl
->
lastLen
:
sdslen
(
c
->
obuf
);
size_t
len
=
rssl
->
lastLen
?
rssl
->
lastLen
:
hi_
sdslen
(
c
->
obuf
);
int
rv
=
SSL_write
(
rssl
->
ssl
,
c
->
obuf
,
len
);
int
rv
=
SSL_write
(
rssl
->
ssl
,
c
->
obuf
,
len
);
if
(
rv
>
0
)
{
if
(
rv
>
0
)
{
...
...
deps/hiredis/test.c
View file @
6866158f
...
@@ -340,21 +340,21 @@ static void test_format_commands(void) {
...
@@ -340,21 +340,21 @@ static void test_format_commands(void) {
len
==
4
+
4
+
(
3
+
2
)
+
4
+
(
7
+
2
)
+
4
+
(
3
+
2
));
len
==
4
+
4
+
(
3
+
2
)
+
4
+
(
7
+
2
)
+
4
+
(
3
+
2
));
hi_free
(
cmd
);
hi_free
(
cmd
);
sds
sds_cmd
;
hi
sds
sds_cmd
;
sds_cmd
=
NULL
;
sds_cmd
=
NULL
;
test
(
"Format command into sds by passing argc/argv without lengths: "
);
test
(
"Format command into
hi
sds by passing argc/argv without lengths: "
);
len
=
redisFormatSdsCommandArgv
(
&
sds_cmd
,
argc
,
argv
,
NULL
);
len
=
redisFormatSdsCommandArgv
(
&
sds_cmd
,
argc
,
argv
,
NULL
);
test_cond
(
strncmp
(
sds_cmd
,
"*3
\r\n
$3
\r\n
SET
\r\n
$3
\r\n
foo
\r\n
$3
\r\n
bar
\r\n
"
,
len
)
==
0
&&
test_cond
(
strncmp
(
sds_cmd
,
"*3
\r\n
$3
\r\n
SET
\r\n
$3
\r\n
foo
\r\n
$3
\r\n
bar
\r\n
"
,
len
)
==
0
&&
len
==
4
+
4
+
(
3
+
2
)
+
4
+
(
3
+
2
)
+
4
+
(
3
+
2
));
len
==
4
+
4
+
(
3
+
2
)
+
4
+
(
3
+
2
)
+
4
+
(
3
+
2
));
sdsfree
(
sds_cmd
);
hi_
sdsfree
(
sds_cmd
);
sds_cmd
=
NULL
;
sds_cmd
=
NULL
;
test
(
"Format command into sds by passing argc/argv with lengths: "
);
test
(
"Format command into
hi
sds by passing argc/argv with lengths: "
);
len
=
redisFormatSdsCommandArgv
(
&
sds_cmd
,
argc
,
argv
,
lens
);
len
=
redisFormatSdsCommandArgv
(
&
sds_cmd
,
argc
,
argv
,
lens
);
test_cond
(
strncmp
(
sds_cmd
,
"*3
\r\n
$3
\r\n
SET
\r\n
$7
\r\n
foo
\0
xxx
\r\n
$3
\r\n
bar
\r\n
"
,
len
)
==
0
&&
test_cond
(
strncmp
(
sds_cmd
,
"*3
\r\n
$3
\r\n
SET
\r\n
$7
\r\n
foo
\0
xxx
\r\n
$3
\r\n
bar
\r\n
"
,
len
)
==
0
&&
len
==
4
+
4
+
(
3
+
2
)
+
4
+
(
7
+
2
)
+
4
+
(
3
+
2
));
len
==
4
+
4
+
(
3
+
2
)
+
4
+
(
7
+
2
)
+
4
+
(
3
+
2
));
sdsfree
(
sds_cmd
);
hi_
sdsfree
(
sds_cmd
);
}
}
static
void
test_append_formatted_commands
(
struct
config
config
)
{
static
void
test_append_formatted_commands
(
struct
config
config
)
{
...
...
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