summaryrefslogtreecommitdiff
path: root/deps/hiredis
diff options
context:
space:
mode:
authorantirez <antirez@gmail.com>2015-11-16 10:29:35 +0100
committerantirez <antirez@gmail.com>2015-11-17 15:43:23 +0100
commite57cccdefbbac1bef7b397d65df6a353bd9cfeee (patch)
treec9146a12107510432afce5404893bee734f61a53 /deps/hiredis
parent34aadf79c333527da4a188bc3470ce6cacd7a13b (diff)
downloadredis-e57cccdefbbac1bef7b397d65df6a353bd9cfeee.tar.gz
Lua debugger: use sds_malloc() to allocate eval cli array.
Redis-cli handles the debugger "eval" command in a special way since sdssplitargs() would not be ok: we need to send the Redis debugger the whole Lua script without any parsing. However in order to later free the argument vector inside redis-cli using just sdsfreesplitres(), we need to allocate the array of SDS pointers using the same allocator SDS is using, that may differ to what Redis is using. So now a newer version of SDS exports sds_malloc() and other allocator functions to give access, to the program it is linked to, the allocator used internally by SDS.
Diffstat (limited to 'deps/hiredis')
-rw-r--r--deps/hiredis/sds.c9
-rw-r--r--deps/hiredis/sds.h8
2 files changed, 17 insertions, 0 deletions
diff --git a/deps/hiredis/sds.c b/deps/hiredis/sds.c
index f1e4f949d..e3dd67352 100644
--- a/deps/hiredis/sds.c
+++ b/deps/hiredis/sds.c
@@ -1088,6 +1088,15 @@ sds sdsjoinsds(sds *argv, int argc, const char *sep, size_t seplen) {
return join;
}
+/* Wrappers to the allocators used by SDS. Note that SDS will actually
+ * just use the macros defined into sdsalloc.h in order to avoid to pay
+ * the overhead of function calls. Here we define these wrappers only for
+ * the programs SDS is linked to, if they want to touch the SDS internals
+ * even if they use a different allocator. */
+void *sds_malloc(size_t size) { return s_malloc(size); }
+void *sds_realloc(void *ptr, size_t size) { return s_realloc(ptr,size); }
+void sds_free(void *ptr) { s_free(ptr); }
+
#if defined(SDS_TEST_MAIN)
#include <stdio.h>
#include "testhelp.h"
diff --git a/deps/hiredis/sds.h b/deps/hiredis/sds.h
index d7eb4c7d0..394f8b52e 100644
--- a/deps/hiredis/sds.h
+++ b/deps/hiredis/sds.h
@@ -258,6 +258,14 @@ sds sdsRemoveFreeSpace(sds s);
size_t sdsAllocSize(sds s);
void *sdsAllocPtr(sds s);
+/* Export the allocator used by SDS to the program using SDS.
+ * Sometimes the program SDS is linked to, may use a different set of
+ * allocators, but may want to allocate or free things that SDS will
+ * respectively free or allocate. */
+void *sds_malloc(size_t size);
+void *sds_realloc(void *ptr, size_t size);
+void sds_free(void *ptr);
+
#ifdef REDIS_TEST
int sdsTest(int argc, char *argv[]);
#endif