X-Git-Url: https://git.saurik.com/redis.git/blobdiff_plain/cc1cb7e5408291919922ded1aa3921f6b55c6307..64a13a36e685c318319a70b775f91f2c34bcc34f:/src/sds.c diff --git a/src/sds.c b/src/sds.c index 7cb43962..37c63b05 100644 --- a/src/sds.c +++ b/src/sds.c @@ -51,7 +51,11 @@ static void sdsOomAbort(void) { sds sdsnewlen(const void *init, size_t initlen) { struct sdshdr *sh; - sh = zmalloc(sizeof(struct sdshdr)+initlen+1); + if (init) { + sh = zmalloc(sizeof(struct sdshdr)+initlen+1); + } else { + sh = zcalloc(sizeof(struct sdshdr)+initlen+1); + } #ifdef SDS_ABORT_ON_OOM if (sh == NULL) sdsOomAbort(); #else @@ -59,10 +63,8 @@ sds sdsnewlen(const void *init, size_t initlen) { #endif sh->len = initlen; sh->free = 0; - if (initlen) { - if (init) memcpy(sh->buf, init, initlen); - else memset(sh->buf,0,initlen); - } + if (initlen && init) + memcpy(sh->buf, init, initlen); sh->buf[initlen] = '\0'; return (char*)sh->buf; } @@ -552,6 +554,13 @@ err: return NULL; } +void sdssplitargs_free(sds *argv, int argc) { + int j; + + for (j = 0 ;j < argc; j++) sdsfree(argv[j]); + zfree(argv); +} + #ifdef SDS_TEST_MAIN #include #include "testhelp.h"