Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xindoo
redis
提交
b8513c93
R
redis
项目概览
xindoo
/
redis
通知
2
Star
2
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
redis
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
b8513c93
编写于
3月 23, 2011
作者:
A
antirez
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'unstable'
上级
7226cbd1
e360e3bb
变更
2
显示空白变更内容
内联
并排
Showing
2 changed file
with
54 addition
and
6 deletion
+54
-6
.gitignore
.gitignore
+1
-0
src/sds.c
src/sds.c
+53
-6
未找到文件。
.gitignore
浏览文件 @
b8513c93
.*.swp
*.o
*.rdb
*.log
...
...
src/sds.c
浏览文件 @
b8513c93
...
...
@@ -26,6 +26,12 @@
* 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.
*
* History:
*
* - 22 March 2011: History section created on top of sds.c
* - 22 March 2011: Fixed a problem with "\xab" escapes convertion in
* function sdssplitargs().
*/
#define SDS_ABORT_ON_OOM
...
...
@@ -399,11 +405,11 @@ sds sdscatrepr(sds s, char *p, size_t len) {
case
'"'
:
s
=
sdscatprintf
(
s
,
"
\\
%c"
,
*
p
);
break
;
case
'\n'
:
s
=
sdscatlen
(
s
,
"
\\
n"
,
1
);
break
;
case
'\r'
:
s
=
sdscatlen
(
s
,
"
\\
r"
,
1
);
break
;
case
'\t'
:
s
=
sdscatlen
(
s
,
"
\\
t"
,
1
);
break
;
case
'\a'
:
s
=
sdscatlen
(
s
,
"
\\
a"
,
1
);
break
;
case
'\b'
:
s
=
sdscatlen
(
s
,
"
\\
b"
,
1
);
break
;
case
'\n'
:
s
=
sdscatlen
(
s
,
"
\\
n"
,
2
);
break
;
case
'\r'
:
s
=
sdscatlen
(
s
,
"
\\
r"
,
2
);
break
;
case
'\t'
:
s
=
sdscatlen
(
s
,
"
\\
t"
,
2
);
break
;
case
'\a'
:
s
=
sdscatlen
(
s
,
"
\\
a"
,
2
);
break
;
case
'\b'
:
s
=
sdscatlen
(
s
,
"
\\
b"
,
2
);
break
;
default:
if
(
isprint
(
*
p
))
s
=
sdscatprintf
(
s
,
"%c"
,
*
p
);
...
...
@@ -416,6 +422,37 @@ sds sdscatrepr(sds s, char *p, size_t len) {
return
sdscatlen
(
s
,
"
\"
"
,
1
);
}
/* Helper function for sdssplitargs() that returns non zero if 'c'
* is a valid hex digit. */
int
is_hex_digit
(
char
c
)
{
return
(
c
>=
'0'
&&
c
<=
'9'
)
||
(
c
>=
'a'
&&
c
<=
'f'
)
||
(
c
>=
'A'
&&
c
<=
'F'
);
}
/* Helper function for sdssplitargs() that converts an hex digit into an
* integer from 0 to 15 */
int
hex_digit_to_int
(
char
c
)
{
switch
(
c
)
{
case
'0'
:
return
0
;
case
'1'
:
return
1
;
case
'2'
:
return
2
;
case
'3'
:
return
3
;
case
'4'
:
return
4
;
case
'5'
:
return
5
;
case
'6'
:
return
6
;
case
'7'
:
return
7
;
case
'8'
:
return
8
;
case
'9'
:
return
9
;
case
'a'
:
case
'A'
:
return
10
;
case
'b'
:
case
'B'
:
return
11
;
case
'c'
:
case
'C'
:
return
12
;
case
'd'
:
case
'D'
:
return
13
;
case
'e'
:
case
'E'
:
return
14
;
case
'f'
:
case
'F'
:
return
15
;
default:
return
0
;
}
}
/* Split a line into arguments, where every argument can be in the
* following programming-language REPL-alike form:
*
...
...
@@ -445,7 +482,17 @@ sds *sdssplitargs(char *line, int *argc) {
if
(
current
==
NULL
)
current
=
sdsempty
();
while
(
!
done
)
{
if
(
inq
)
{
if
(
*
p
==
'\\'
&&
*
(
p
+
1
))
{
if
(
*
p
==
'\\'
&&
*
(
p
+
1
)
==
'x'
&&
is_hex_digit
(
*
(
p
+
2
))
&&
is_hex_digit
(
*
(
p
+
3
)))
{
unsigned
char
byte
;
byte
=
(
hex_digit_to_int
(
*
(
p
+
2
))
*
16
)
+
hex_digit_to_int
(
*
(
p
+
3
));
current
=
sdscatlen
(
current
,(
char
*
)
&
byte
,
1
);
p
+=
3
;
}
else
if
(
*
p
==
'\\'
&&
*
(
p
+
1
))
{
char
c
;
p
++
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录