diff options
author | Mihir Joshi <mihir.coldplay@gmail.com> | 2014-12-14 10:12:58 -0500 |
---|---|---|
committer | Mihir Joshi <mihir.coldplay@gmail.com> | 2014-12-14 10:12:58 -0500 |
commit | 352172a7ef5015c0c487ba6258cdf3b4b31a551c (patch) | |
tree | fd09082b091a7d933aea2471b684c636819267ec | |
parent | e9b014cfacb443a0e828002d900a5a94a704d965 (diff) | |
download | redis-352172a7ef5015c0c487ba6258cdf3b4b31a551c.tar.gz |
Stricter options for SET command
- As per Antirez's suggestion, this commit raises an error when mutually
exclusive options are provided. Duplicate options are allowed.
-rw-r--r-- | src/t_string.c | 20 |
1 files changed, 12 insertions, 8 deletions
diff --git a/src/t_string.c b/src/t_string.c index 0bbefcaad..067aa10e3 100644 --- a/src/t_string.c +++ b/src/t_string.c @@ -103,20 +103,24 @@ void setCommand(redisClient *c) { char *a = c->argv[j]->ptr; robj *next = (j == c->argc-1) ? NULL : c->argv[j+1]; - if (!(flags & REDIS_SET_NX) && (a[0] == 'n' || a[0] == 'N') && - (a[1] == 'x' || a[1] == 'X') && a[2] == '\0') { + if ((a[0] == 'n' || a[0] == 'N') && + (a[1] == 'x' || a[1] == 'X') && a[2] == '\0' && + !(flags & REDIS_SET_XX)) { flags |= REDIS_SET_NX; - } else if (!(flags & REDIS_SET_XX) && (a[0] == 'x' || a[0] == 'X') && - (a[1] == 'x' || a[1] == 'X') && a[2] == '\0') { + } else if ((a[0] == 'x' || a[0] == 'X') && + (a[1] == 'x' || a[1] == 'X') && a[2] == '\0' && + !(flags & REDIS_SET_NX)) { flags |= REDIS_SET_XX; - } else if (!(flags & REDIS_SET_EX) && (a[0] == 'e' || a[0] == 'E') && - (a[1] == 'x' || a[1] == 'X') && a[2] == '\0' && next) { + } else if ((a[0] == 'e' || a[0] == 'E') && + (a[1] == 'x' || a[1] == 'X') && a[2] == '\0' && + !(flags & REDIS_SET_PX) && next) { flags |= REDIS_SET_EX; unit = UNIT_SECONDS; expire = next; j++; - } else if (!(flags & REDIS_SET_PX) && (a[0] == 'p' || a[0] == 'P') && - (a[1] == 'x' || a[1] == 'X') && a[2] == '\0' && next) { + } else if ((a[0] == 'p' || a[0] == 'P') && + (a[1] == 'x' || a[1] == 'X') && a[2] == '\0' && + !(flags & REDIS_SET_EX) && next) { flags |= REDIS_SET_PX; unit = UNIT_MILLISECONDS; expire = next; |