]> git.saurik.com Git - redis.git/blobdiff - src/sds.c
Persist `make` settings and trigger rebuild if anything changes
[redis.git] / src / sds.c
index 092a431e5b0bd4ca360bc250cd99f9b4463d37c5..bc6aa6b2f25cc8988b405782a3e25d50e08ea704 100644 (file)
--- a/src/sds.c
+++ b/src/sds.c
@@ -111,6 +111,24 @@ 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;
+}
+
+size_t sdsAllocSize(sds s) {
+    struct sdshdr *sh = (void*) (s-(sizeof(struct sdshdr)));
+
+    return sizeof(*sh)+sh->len+sh->free+1;
+}
+
 /* 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.