]> git.saurik.com Git - redis.git/commitdiff
IMPORTANT FIX: new dump format implementation was broken. Now it's ok but tests for...
authorantirez <antirez@gmail.com>
Fri, 27 Mar 2009 20:27:42 +0000 (21:27 +0100)
committerantirez <antirez@gmail.com>
Fri, 27 Mar 2009 20:27:42 +0000 (21:27 +0100)
redis.c

diff --git a/redis.c b/redis.c
index cf3d667567129b96739e5da5ec88a2b3cc12f832..87521e1607885526531fae29948873a16c8e7e8f 100644 (file)
--- a/redis.c
+++ b/redis.c
 #define REDIS_RDB_6BITLEN 0
 #define REDIS_RDB_14BITLEN 1
 #define REDIS_RDB_32BITLEN 2
-#define REDIS_RDB_64BITLEN 3
+#define REDIS_RDB_ENCVAL 3
 #define REDIS_RDB_LENERR UINT_MAX
 
 /* When a length of a string object stored on disk has the first two bits
@@ -1518,7 +1518,7 @@ static int rdbSaveLen(FILE *fp, uint32_t len) {
         /* Save a 14 bit len */
         buf[0] = ((len>>8)&0xFF)|(REDIS_RDB_14BITLEN<<6);
         buf[1] = len&0xFF;
-        if (fwrite(buf,4,1,fp) == 0) return -1;
+        if (fwrite(buf,2,1,fp) == 0) return -1;
     } else {
         /* Save a 32 bit len */
         buf[0] = (REDIS_RDB_32BITLEN<<6);
@@ -1670,11 +1670,14 @@ static uint32_t rdbLoadLen(FILE *fp, int rdbver) {
         if (fread(&len,4,1,fp) == 0) return REDIS_RDB_LENERR;
         return ntohl(len);
     } else {
+        int type;
+
         if (fread(buf,1,1,fp) == 0) return REDIS_RDB_LENERR;
-        if ((buf[0]&0xC0) == REDIS_RDB_6BITLEN) {
+        type = (buf[0]&0xC0)>>6;
+        if (type == REDIS_RDB_6BITLEN) {
             /* Read a 6 bit len */
             return buf[0];
-        } else if ((buf[0]&0xC0) == REDIS_RDB_14BITLEN) {
+        } else if (type == REDIS_RDB_14BITLEN) {
             /* Read a 14 bit len */
             if (fread(buf+1,1,1,fp) == 0) return REDIS_RDB_LENERR;
             return ((buf[0]&0x3F)<<8)|buf[1];