/* SDSLib, A C dynamic strings library
*
- * Copyright (c) 2006-2009, Salvatore Sanfilippo <antirez at gmail dot com>
+ * Copyright (c) 2006-2010, Salvatore Sanfilippo <antirez at gmail dot com>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* POSSIBILITY OF SUCH DAMAGE.
*/
+#define SDS_ABORT_ON_OOM
+
#include "sds.h"
#include <stdio.h>
#include <stdlib.h>
size_t totlen = sh->free+sh->len;
if (totlen < len) {
- s = sdsMakeRoomFor(s,len-totlen);
+ s = sdsMakeRoomFor(s,len-sh->len);
if (s == NULL) return NULL;
sh = (void*) (s-(sizeof(struct sdshdr)));
totlen = sh->free+sh->len;
sds sdscatprintf(sds s, const char *fmt, ...) {
va_list ap;
char *buf, *t;
- size_t buflen = 32;
+ size_t buflen = 16;
while(1) {
buf = zmalloc(buflen);
if (tokens == NULL) sdsOomAbort();
#endif
if (seplen < 1 || len < 0 || tokens == NULL) return NULL;
+ if (len == 0) {
+ *count = 0;
+ return tokens;
+ }
for (j = 0; j < (len-(seplen-1)); j++) {
/* make sure there is room for the next element and the final one */
if (slots < elements+2) {
+ sds *newtokens;
+
slots *= 2;
- sds *newtokens = zrealloc(tokens,sizeof(sds)*slots);
+ newtokens = zrealloc(tokens,sizeof(sds)*slots);
if (newtokens == NULL) {
#ifdef SDS_ABORT_ON_OOM
sdsOomAbort();