]> git.saurik.com Git - redis.git/commitdiff
function to create a new ziplist encoded list
authorPieter Noordhuis <pcnoordhuis@gmail.com>
Mon, 31 May 2010 21:10:05 +0000 (23:10 +0200)
committerPieter Noordhuis <pcnoordhuis@gmail.com>
Mon, 31 May 2010 21:10:05 +0000 (23:10 +0200)
redis.c

diff --git a/redis.c b/redis.c
index 3abfa44c266409e7063f470388c774b9ddc4bf17..33750b933b36ba5027f61ad0e6cb3093d62818ab 100644 (file)
--- a/redis.c
+++ b/redis.c
@@ -2984,9 +2984,17 @@ static robj *dupStringObject(robj *o) {
 
 static robj *createListObject(void) {
     list *l = listCreate();
-
+    robj *o = createObject(REDIS_LIST,l);
     listSetFreeMethod(l,decrRefCount);
-    return createObject(REDIS_LIST,l);
+    o->encoding = REDIS_ENCODING_LIST;
+    return o;
+}
+
+static robj *createZiplistObject(void) {
+    unsigned char *zl = ziplistNew();
+    robj *o = createObject(REDIS_LIST,zl);
+    o->encoding = REDIS_ENCODING_ZIPLIST;
+    return o;
 }
 
 static robj *createSetObject(void) {
@@ -4031,8 +4039,7 @@ static robj *rdbLoadObject(int type, FILE *fp) {
         /* Read list value */
         if ((len = rdbLoadLen(fp,NULL)) == REDIS_RDB_LENERR) return NULL;
 
-        o = createObject(REDIS_LIST,ziplistNew());
-        o->encoding = REDIS_ENCODING_ZIPLIST;
+        o = createZiplistObject();
 
         /* Load every single element of the list */
         while(len--) {
@@ -5004,8 +5011,7 @@ static void pushGenericCommand(redisClient *c, int where) {
             addReply(c,shared.cone);
             return;
         }
-        lobj = createObject(REDIS_LIST,ziplistNew());
-        lobj->encoding = REDIS_ENCODING_ZIPLIST;
+        lobj = createZiplistObject();
         dictAdd(c->db->dict,c->argv[1],lobj);
         incrRefCount(c->argv[1]);
     } else {
@@ -5293,8 +5299,7 @@ static void rpoplpushcommand(redisClient *c) {
         if (!handleClientsWaitingListPush(c,c->argv[2],value)) {
             /* Create the list if the key does not exist */
             if (!dobj) {
-                dobj = createObject(REDIS_LIST,ziplistNew());
-                dobj->encoding = REDIS_ENCODING_ZIPLIST;
+                dobj = createZiplistObject();
                 dictAdd(c->db->dict,c->argv[2],dobj);
                 incrRefCount(c->argv[2]);
             }