From 3c08fdae712e79cc7a678a2969c2ac15c5ff8865 Mon Sep 17 00:00:00 2001 From: antirez Date: Tue, 31 Jan 2012 10:35:52 +0100 Subject: [PATCH] 64 bit instances are no longer limited to have at max 2^32-1 elements in lists. --- src/adlist.c | 4 ++-- src/adlist.h | 4 ++-- src/redis.c | 6 +++--- src/redis.h | 2 +- src/t_list.c | 14 ++++---------- 5 files changed, 12 insertions(+), 18 deletions(-) diff --git a/src/adlist.c b/src/adlist.c index 015012f5..51ba03bd 100644 --- a/src/adlist.c +++ b/src/adlist.c @@ -57,7 +57,7 @@ list *listCreate(void) * This function can't fail. */ void listRelease(list *list) { - unsigned int len; + unsigned long len; listNode *current, *next; current = list->head; @@ -310,7 +310,7 @@ listNode *listSearchKey(list *list, void *key) * and so on. Negative integers are used in order to count * from the tail, -1 is the last element, -2 the penultimante * and so on. If the index is out of range NULL is returned. */ -listNode *listIndex(list *list, int index) { +listNode *listIndex(list *list, long index) { listNode *n; if (index < 0) { diff --git a/src/adlist.h b/src/adlist.h index a1209f62..36dba1ff 100644 --- a/src/adlist.h +++ b/src/adlist.h @@ -50,7 +50,7 @@ typedef struct list { void *(*dup)(void *ptr); void (*free)(void *ptr); int (*match)(void *ptr, void *key); - unsigned int len; + unsigned long len; } list; /* Functions implemented as macros */ @@ -81,7 +81,7 @@ listNode *listNext(listIter *iter); void listReleaseIterator(listIter *iter); list *listDup(list *orig); listNode *listSearchKey(list *list, void *key); -listNode *listIndex(list *list, int index); +listNode *listIndex(list *list, long index); void listRewind(list *list, listIter *li); void listRewindTail(list *list, listIter *li); diff --git a/src/redis.c b/src/redis.c index ca49271d..e89a9c58 100644 --- a/src/redis.c +++ b/src/redis.c @@ -1465,7 +1465,7 @@ sds genRedisInfoString(char *section) { if (sections++) info = sdscat(info,"\r\n"); info = sdscatprintf(info, "# Clients\r\n" - "connected_clients:%d\r\n" + "connected_clients:%lu\r\n" "client_longest_output_list:%lu\r\n" "client_biggest_input_buf:%lu\r\n" "blocked_clients:%d\r\n", @@ -1580,7 +1580,7 @@ sds genRedisInfoString(char *section) { "keyspace_hits:%lld\r\n" "keyspace_misses:%lld\r\n" "pubsub_channels:%ld\r\n" - "pubsub_patterns:%u\r\n" + "pubsub_patterns:%lu\r\n" "latest_fork_usec:%lld\r\n", server.stat_numconnections, server.stat_numcommands, @@ -1633,7 +1633,7 @@ sds genRedisInfoString(char *section) { } } info = sdscatprintf(info, - "connected_slaves:%d\r\n", + "connected_slaves:%lu\r\n", listLength(server.slaves)); if (listLength(server.slaves)) { int slaveid = 0; diff --git a/src/redis.h b/src/redis.h index def7881f..615916fe 100644 --- a/src/redis.h +++ b/src/redis.h @@ -823,7 +823,7 @@ void listTypeTryConversion(robj *subject, robj *value); void listTypePush(robj *subject, robj *value, int where); robj *listTypePop(robj *subject, int where); unsigned long listTypeLength(robj *subject); -listTypeIterator *listTypeInitIterator(robj *subject, int index, unsigned char direction); +listTypeIterator *listTypeInitIterator(robj *subject, long index, unsigned char direction); void listTypeReleaseIterator(listTypeIterator *li); int listTypeNext(listTypeIterator *li, listTypeEntry *entry); robj *listTypeGet(listTypeEntry *entry); diff --git a/src/t_list.c b/src/t_list.c index f856d6cd..3742ec49 100644 --- a/src/t_list.c +++ b/src/t_list.c @@ -86,7 +86,7 @@ unsigned long listTypeLength(robj *subject) { } /* Initialize an iterator at the specified index. */ -listTypeIterator *listTypeInitIterator(robj *subject, int index, unsigned char direction) { +listTypeIterator *listTypeInitIterator(robj *subject, long index, unsigned char direction) { listTypeIterator *li = zmalloc(sizeof(listTypeIterator)); li->subject = subject; li->encoding = subject->encoding; @@ -484,10 +484,7 @@ void rpopCommand(redisClient *c) { void lrangeCommand(redisClient *c) { robj *o; - long start; - long end; - int llen; - int rangelen; + long start, end, llen, rangelen; if ((getLongFromObjectOrReply(c, c->argv[2], &start, NULL) != REDIS_OK) || (getLongFromObjectOrReply(c, c->argv[3], &end, NULL) != REDIS_OK)) return; @@ -546,10 +543,7 @@ void lrangeCommand(redisClient *c) { void ltrimCommand(redisClient *c) { robj *o; - long start; - long end; - int llen; - int j, ltrim, rtrim; + long start, end, llen, j, ltrim, rtrim; list *list; listNode *ln; @@ -604,7 +598,7 @@ void lremCommand(redisClient *c) { robj *subject, *obj; obj = c->argv[3] = tryObjectEncoding(c->argv[3]); long toremove; - int removed = 0; + long removed = 0; listTypeEntry entry; if ((getLongFromObjectOrReply(c, c->argv[2], &toremove, NULL) != REDIS_OK)) -- GitLab