diff options
author | Dustin Sallings <dustin@spy.net> | 2009-03-15 00:13:41 -0700 |
---|---|---|
committer | Dustin Sallings <dustin@spy.net> | 2009-03-19 01:52:54 -0700 |
commit | 24fda0fc94003e84ed719083316166ac5c64a53e (patch) | |
tree | 5c5a9b435d1ac626e41be52a89b6471f239cd6ac | |
parent | 7659ae1cb06c2aaa7ea491ef7a63740b0ef4abcf (diff) | |
download | memcached-24fda0fc94003e84ed719083316166ac5c64a53e.tar.gz |
Handle 64-bit deltas in incr/decr.
-rw-r--r-- | memcached.c | 4 | ||||
-rwxr-xr-x | t/incrdecr.t | 10 |
2 files changed, 9 insertions, 5 deletions
diff --git a/memcached.c b/memcached.c index b342e6a..205c8cb 100644 --- a/memcached.c +++ b/memcached.c @@ -2671,7 +2671,7 @@ static void process_update_command(conn *c, token_t *tokens, const size_t ntoken static void process_arithmetic_command(conn *c, token_t *tokens, const size_t ntokens, const bool incr) { char temp[sizeof("18446744073709551615")]; item *it; - int64_t delta; + uint64_t delta; char *key; size_t nkey; @@ -2687,7 +2687,7 @@ static void process_arithmetic_command(conn *c, token_t *tokens, const size_t nt key = tokens[KEY_TOKEN].value; nkey = tokens[KEY_TOKEN].length; - if (!safe_strtoll(tokens[2].value, &delta)) { + if (!safe_strtoull(tokens[2].value, &delta)) { out_string(c, "CLIENT_ERROR invalid numeric delta argument"); return; } diff --git a/t/incrdecr.t b/t/incrdecr.t index 83153c7..e0ba65f 100755 --- a/t/incrdecr.t +++ b/t/incrdecr.t @@ -1,7 +1,7 @@ #!/usr/bin/perl use strict; -use Test::More tests => 21; +use Test::More tests => 23; use FindBin qw($Bin); use lib "$Bin/lib"; use MemcachedTest; @@ -58,10 +58,14 @@ is(scalar <$sock>, "NOT_FOUND\r\n", "can't decr bogus key"); print $sock "decr incr 5\r\n"; is(scalar <$sock>, "NOT_FOUND\r\n", "can't incr bogus key"); +print $sock "set bigincr 0 0 1\r\n0\r\n"; +is(scalar <$sock>, "STORED\r\n", "stored bigincr"); +print $sock "incr bigincr 18446744073709551610\r\n"; +is(scalar <$sock>, "18446744073709551610\r\n"); + print $sock "set text 0 0 2\r\nhi\r\n"; -is(scalar <$sock>, "STORED\r\n", "stored text"); +is(scalar <$sock>, "STORED\r\n", "stored hi"); print $sock "incr text 1\r\n"; is(scalar <$sock>, "CLIENT_ERROR cannot increment or decrement non-numeric value\r\n", "hi - 1 = 0"); - |