]> git.saurik.com Git - redis.git/commitdiff
sds.c new function sdsRemoveFreeSpace().
authorantirez <antirez@gmail.com>
Wed, 14 Mar 2012 09:13:23 +0000 (10:13 +0100)
committerantirez <antirez@gmail.com>
Wed, 14 Mar 2012 14:36:20 +0000 (15:36 +0100)
The new function is used in order to resize the string allocation so
that only the minimal allocation possible is used, removing all the free
space at the end of the string normally used to improve efficiency of
concatenation operations.

src/sds.c

index 092a431e5b0bd4ca360bc250cd99f9b4463d37c5..82d12e232a4f774477046be8e909ae439cafda4b 100644 (file)
--- a/src/sds.c
+++ b/src/sds.c
@@ -111,6 +111,18 @@ sds sdsMakeRoomFor(sds s, size_t addlen) {
     return newsh->buf;
 }
 
+/* Reallocate the sds string so that it has no free space at the end. The
+ * contained string remains not altered, but next concatenation operations
+ * will require a reallocation. */
+sds sdsRemoveFreeSpace(sds s) {
+    struct sdshdr *sh;
+
+    sh = (void*) (s-(sizeof(struct sdshdr)));
+    sh = zrealloc(sh, sizeof(struct sdshdr)+sh->len+1);
+    sh->free = 0;
+    return sh->buf;
+}
+
 /* Increment the sds length and decrements the left free space at the
  * end of the string accordingly to 'incr'. Also set the null term
  * in the new end of the string.