summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDustin Sallings <dustin@spy.net>2009-03-15 00:13:41 -0700
committerDustin Sallings <dustin@spy.net>2009-03-19 01:52:54 -0700
commit24fda0fc94003e84ed719083316166ac5c64a53e (patch)
tree5c5a9b435d1ac626e41be52a89b6471f239cd6ac
parent7659ae1cb06c2aaa7ea491ef7a63740b0ef4abcf (diff)
downloadmemcached-24fda0fc94003e84ed719083316166ac5c64a53e.tar.gz
Handle 64-bit deltas in incr/decr.
-rw-r--r--memcached.c4
-rwxr-xr-xt/incrdecr.t10
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");
-