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
a2b2d88f
Commit
a2b2d88f
authored
Dec 06, 2018
by
antirez
Browse files
RESP3: hiredis: initial double implementation.
parent
005915b5
Changes
6
Show whitespace changes
Inline
Side-by-side
deps/hiredis/.travis.yml
View file @
a2b2d88f
...
@@ -8,6 +8,12 @@ os:
...
@@ -8,6 +8,12 @@ os:
-
linux
-
linux
-
osx
-
osx
branches
:
only
:
-
staging
-
trying
-
master
before_script
:
before_script
:
-
if [ "$TRAVIS_OS_NAME" == "osx" ] ; then brew update; brew install redis; fi
-
if [ "$TRAVIS_OS_NAME" == "osx" ] ; then brew update; brew install redis; fi
...
...
deps/hiredis/hiredis.c
View file @
a2b2d88f
...
@@ -47,6 +47,7 @@ static redisReply *createReplyObject(int type);
...
@@ -47,6 +47,7 @@ static redisReply *createReplyObject(int type);
static
void
*
createStringObject
(
const
redisReadTask
*
task
,
char
*
str
,
size_t
len
);
static
void
*
createStringObject
(
const
redisReadTask
*
task
,
char
*
str
,
size_t
len
);
static
void
*
createArrayObject
(
const
redisReadTask
*
task
,
int
elements
);
static
void
*
createArrayObject
(
const
redisReadTask
*
task
,
int
elements
);
static
void
*
createIntegerObject
(
const
redisReadTask
*
task
,
long
long
value
);
static
void
*
createIntegerObject
(
const
redisReadTask
*
task
,
long
long
value
);
static
void
*
createDoubleObject
(
const
redisReadTask
*
task
,
double
value
);
static
void
*
createNilObject
(
const
redisReadTask
*
task
);
static
void
*
createNilObject
(
const
redisReadTask
*
task
);
/* Default set of functions to build the reply. Keep in mind that such a
/* Default set of functions to build the reply. Keep in mind that such a
...
@@ -55,6 +56,7 @@ static redisReplyObjectFunctions defaultFunctions = {
...
@@ -55,6 +56,7 @@ static redisReplyObjectFunctions defaultFunctions = {
createStringObject
,
createStringObject
,
createArrayObject
,
createArrayObject
,
createIntegerObject
,
createIntegerObject
,
createDoubleObject
,
createNilObject
,
createNilObject
,
freeReplyObject
freeReplyObject
};
};
...
@@ -179,6 +181,25 @@ static void *createIntegerObject(const redisReadTask *task, long long value) {
...
@@ -179,6 +181,25 @@ static void *createIntegerObject(const redisReadTask *task, long long value) {
return
r
;
return
r
;
}
}
static
void
*
createDoubleObject
(
const
redisReadTask
*
task
,
double
value
)
{
redisReply
*
r
,
*
parent
;
r
=
createReplyObject
(
REDIS_REPLY_DOUBLE
);
if
(
r
==
NULL
)
return
NULL
;
r
->
dval
=
value
;
if
(
task
->
parent
)
{
parent
=
task
->
parent
->
obj
;
assert
(
parent
->
type
==
REDIS_REPLY_ARRAY
||
parent
->
type
==
REDIS_REPLY_MAP
||
parent
->
type
==
REDIS_REPLY_SET
);
parent
->
element
[
task
->
idx
]
=
r
;
}
return
r
;
}
static
void
*
createNilObject
(
const
redisReadTask
*
task
)
{
static
void
*
createNilObject
(
const
redisReadTask
*
task
)
{
redisReply
*
r
,
*
parent
;
redisReply
*
r
,
*
parent
;
...
...
deps/hiredis/hiredis.h
View file @
a2b2d88f
...
@@ -88,6 +88,7 @@ extern "C" {
...
@@ -88,6 +88,7 @@ extern "C" {
typedef
struct
redisReply
{
typedef
struct
redisReply
{
int
type
;
/* REDIS_REPLY_* */
int
type
;
/* REDIS_REPLY_* */
long
long
integer
;
/* The integer when type is REDIS_REPLY_INTEGER */
long
long
integer
;
/* The integer when type is REDIS_REPLY_INTEGER */
double
dval
;
/* The double when type is REDIS_REPLY_DOUBLE */
size_t
len
;
/* Length of string */
size_t
len
;
/* Length of string */
char
*
str
;
/* Used for both REDIS_REPLY_ERROR and REDIS_REPLY_STRING */
char
*
str
;
/* Used for both REDIS_REPLY_ERROR and REDIS_REPLY_STRING */
size_t
elements
;
/* number of elements, for REDIS_REPLY_ARRAY */
size_t
elements
;
/* number of elements, for REDIS_REPLY_ARRAY */
...
...
deps/hiredis/read.c
View file @
a2b2d88f
...
@@ -29,7 +29,6 @@
...
@@ -29,7 +29,6 @@
* POSSIBILITY OF SUCH DAMAGE.
* POSSIBILITY OF SUCH DAMAGE.
*/
*/
#include "fmacros.h"
#include "fmacros.h"
#include <string.h>
#include <string.h>
#include <stdlib.h>
#include <stdlib.h>
...
@@ -40,6 +39,7 @@
...
@@ -40,6 +39,7 @@
#include <errno.h>
#include <errno.h>
#include <ctype.h>
#include <ctype.h>
#include <limits.h>
#include <limits.h>
#include <math.h>
#include "read.h"
#include "read.h"
#include "sds.h"
#include "sds.h"
...
@@ -278,6 +278,36 @@ static int processLineItem(redisReader *r) {
...
@@ -278,6 +278,36 @@ static int processLineItem(redisReader *r) {
}
else
{
}
else
{
obj
=
(
void
*
)
REDIS_REPLY_INTEGER
;
obj
=
(
void
*
)
REDIS_REPLY_INTEGER
;
}
}
}
else
if
(
cur
->
type
==
REDIS_REPLY_DOUBLE
)
{
if
(
r
->
fn
&&
r
->
fn
->
createDouble
)
{
char
buf
[
326
],
*
eptr
;
double
d
;
if
((
size_t
)
len
-
1
>=
sizeof
(
buf
))
{
__redisReaderSetError
(
r
,
REDIS_ERR_PROTOCOL
,
"Double value is too large"
);
return
REDIS_ERR
;
}
memcpy
(
buf
,
p
+
1
,
len
-
1
);
buf
[
len
-
1
]
=
'\0'
;
if
(
strcasecmp
(
buf
,
",inf"
)
==
0
)
{
d
=
1
.
0
/
0
.
0
;
/* Positive infinite. */
}
else
if
(
strcasecmp
(
buf
,
",-inf"
)
==
0
)
{
d
=
-
1
.
0
/
0
.
0
;
/* Nevative infinite. */
}
else
{
d
=
strtod
((
char
*
)
buf
,
&
eptr
);
if
(
eptr
[
0
]
!=
'\0'
||
isnan
(
d
))
{
__redisReaderSetError
(
r
,
REDIS_ERR_PROTOCOL
,
"Bad double value"
);
return
REDIS_ERR
;
}
}
obj
=
r
->
fn
->
createDouble
(
cur
,
d
);
}
else
{
obj
=
(
void
*
)
REDIS_REPLY_DOUBLE
;
}
}
else
{
}
else
{
/* Type will be error or status. */
/* Type will be error or status. */
if
(
r
->
fn
&&
r
->
fn
->
createString
)
if
(
r
->
fn
&&
r
->
fn
->
createString
)
...
@@ -460,6 +490,9 @@ static int processItem(redisReader *r) {
...
@@ -460,6 +490,9 @@ static int processItem(redisReader *r) {
case
':'
:
case
':'
:
cur
->
type
=
REDIS_REPLY_INTEGER
;
cur
->
type
=
REDIS_REPLY_INTEGER
;
break
;
break
;
case
','
:
cur
->
type
=
REDIS_REPLY_DOUBLE
;
break
;
case
'$'
:
case
'$'
:
cur
->
type
=
REDIS_REPLY_STRING
;
cur
->
type
=
REDIS_REPLY_STRING
;
break
;
break
;
...
@@ -487,6 +520,7 @@ static int processItem(redisReader *r) {
...
@@ -487,6 +520,7 @@ static int processItem(redisReader *r) {
case
REDIS_REPLY_ERROR
:
case
REDIS_REPLY_ERROR
:
case
REDIS_REPLY_STATUS
:
case
REDIS_REPLY_STATUS
:
case
REDIS_REPLY_INTEGER
:
case
REDIS_REPLY_INTEGER
:
case
REDIS_REPLY_DOUBLE
:
return
processLineItem
(
r
);
return
processLineItem
(
r
);
case
REDIS_REPLY_STRING
:
case
REDIS_REPLY_STRING
:
return
processBulkItem
(
r
);
return
processBulkItem
(
r
);
...
...
deps/hiredis/read.h
View file @
a2b2d88f
...
@@ -81,6 +81,7 @@ typedef struct redisReplyObjectFunctions {
...
@@ -81,6 +81,7 @@ typedef struct redisReplyObjectFunctions {
void
*
(
*
createString
)(
const
redisReadTask
*
,
char
*
,
size_t
);
void
*
(
*
createString
)(
const
redisReadTask
*
,
char
*
,
size_t
);
void
*
(
*
createArray
)(
const
redisReadTask
*
,
int
);
void
*
(
*
createArray
)(
const
redisReadTask
*
,
int
);
void
*
(
*
createInteger
)(
const
redisReadTask
*
,
long
long
);
void
*
(
*
createInteger
)(
const
redisReadTask
*
,
long
long
);
void
*
(
*
createDouble
)(
const
redisReadTask
*
,
double
);
void
*
(
*
createNil
)(
const
redisReadTask
*
);
void
*
(
*
createNil
)(
const
redisReadTask
*
);
void
(
*
freeObject
)(
void
*
);
void
(
*
freeObject
)(
void
*
);
}
redisReplyObjectFunctions
;
}
redisReplyObjectFunctions
;
...
...
src/redis-cli.c
View file @
a2b2d88f
...
@@ -810,6 +810,9 @@ static sds cliFormatReplyTTY(redisReply *r, char *prefix) {
...
@@ -810,6 +810,9 @@ static sds cliFormatReplyTTY(redisReply *r, char *prefix) {
case
REDIS_REPLY_INTEGER
:
case
REDIS_REPLY_INTEGER
:
out
=
sdscatprintf
(
out
,
"(integer) %lld
\n
"
,
r
->
integer
);
out
=
sdscatprintf
(
out
,
"(integer) %lld
\n
"
,
r
->
integer
);
break
;
break
;
case
REDIS_REPLY_DOUBLE
:
out
=
sdscatprintf
(
out
,
"(double) %.17g
\n
"
,
r
->
dval
);
break
;
case
REDIS_REPLY_STRING
:
case
REDIS_REPLY_STRING
:
/* If you are producing output for the standard output we want
/* If you are producing output for the standard output we want
* a more interesting output with quoted characters and so forth */
* a more interesting output with quoted characters and so forth */
...
...
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