]> git.saurik.com Git - redis.git/blobdiff - zipmap.c
support for include directive in config parser
[redis.git] / zipmap.c
index 5729c18f733faa4deadc104dd23ae6d464236ad4..f45ef0dd64c7d795638178d732934bb9755b6a36 100644 (file)
--- a/zipmap.c
+++ b/zipmap.c
@@ -116,7 +116,7 @@ static unsigned int zipmapDecodeLength(unsigned char *p) {
     unsigned int len = *p;
 
     if (len < ZIPMAP_BIGLEN) return len;
-    memcpy(&len,p,sizeof(unsigned int));
+    memcpy(&len,p+1,sizeof(unsigned int));
     return len;
 }
 
@@ -363,6 +363,15 @@ int zipmapExists(unsigned char *zm, unsigned char *key, unsigned int klen) {
     return zipmapLookupRaw(zm,key,klen,NULL,NULL,NULL) != NULL;
 }
 
+/* Return the number of entries inside a zipmap */
+unsigned int zipmapLen(unsigned char *zm) {
+    unsigned char *p = zipmapRewind(zm);
+    unsigned int len = 0;
+
+    while((p = zipmapNext(p,NULL,NULL,NULL,NULL)) != NULL) len++;
+    return len;
+}
+
 void zipmapRepr(unsigned char *p) {
     unsigned int l;