Permalink
Browse files

sds.c single quotes support

  • Loading branch information...
1 parent 072a905 commit cacab3b1c8b7cc8b03316a3f9fb4e84ced38f40f @antirez committed Oct 28, 2011
Showing with 22 additions and 2 deletions.
  1. +22 −2 src/sds.c
View
@@ -474,7 +474,8 @@ sds *sdssplitargs(char *line, int *argc) {
while(*p && isspace(*p)) p++;
if (*p) {
/* get a token */
- int inq=0; /* set to 1 if we are in "quotes" */
+ int inq=0; /* set to 1 if we are in "quotes" */
+ int insq=0; /* set to 1 if we are in 'single quotes' */
int done=0;
if (current == NULL) current = sdsempty();
@@ -504,7 +505,23 @@ sds *sdssplitargs(char *line, int *argc) {
}
current = sdscatlen(current,&c,1);
} else if (*p == '"') {
- /* closing quote must be followed by a space */
+ /* closing quote must be followed by a space or
+ * nothing at all. */
+ if (*(p+1) && !isspace(*(p+1))) goto err;
+ done=1;
+ } else if (!*p) {
+ /* unterminated quotes */
+ goto err;
+ } else {
+ current = sdscatlen(current,p,1);
+ }
+ } else if (insq) {
+ if (*p == '\\' && *(p+1) == '\'') {
+ p++;
+ current = sdscatlen(current,"'",1);
+ } else if (*p == '\'') {
+ /* closing quote must be followed by a space or
+ * nothing at all. */
if (*(p+1) && !isspace(*(p+1))) goto err;
done=1;
} else if (!*p) {
@@ -525,6 +542,9 @@ sds *sdssplitargs(char *line, int *argc) {
case '"':
inq=1;
break;
+ case '\'':
+ insq=1;
+ break;
default:
current = sdscatlen(current,p,1);
break;

0 comments on commit cacab3b

Please sign in to comment.