Unify style
[jansson.git] / src / strbuffer.c
index 6674f49..92c0892 100644 (file)
@@ -1,8 +1,15 @@
+/*
+ * Copyright (c) 2009-2011 Petri Lehtinen <petri@digip.org>
+ *
+ * Jansson is free software; you can redistribute it and/or modify
+ * it under the terms of the MIT license. See LICENSE for details.
+ */
+
 #define _GNU_SOURCE
 #include <stdlib.h>
 #include <string.h>
+#include "jansson_private.h"
 #include "strbuffer.h"
-#include "util.h"
 
 #define STRBUFFER_MIN_SIZE  16
 #define STRBUFFER_FACTOR    2
@@ -16,7 +23,8 @@ int strbuffer_init(strbuffer_t *strbuff)
     if(!strbuff->value)
         return -1;
 
-    memset(strbuff->value, 0, strbuff->size);
+    /* initialize to empty */
+    strbuff->value[0] = '\0';
     return 0;
 }
 
@@ -28,7 +36,13 @@ void strbuffer_close(strbuffer_t *strbuff)
     strbuff->value = NULL;
 }
 
-const char *strbuffer_value(strbuffer_t *strbuff)
+void strbuffer_clear(strbuffer_t *strbuff)
+{
+    strbuff->length = 0;
+    strbuff->value[0] = '\0';
+}
+
+const char *strbuffer_value(const strbuffer_t *strbuff)
 {
     return strbuff->value;
 }
@@ -45,6 +59,11 @@ int strbuffer_append(strbuffer_t *strbuff, const char *string)
     return strbuffer_append_bytes(strbuff, string, strlen(string));
 }
 
+int strbuffer_append_byte(strbuffer_t *strbuff, char byte)
+{
+    return strbuffer_append_bytes(strbuff, &byte, 1);
+}
+
 int strbuffer_append_bytes(strbuffer_t *strbuff, const char *data, int size)
 {
     if(strbuff->length + size >= strbuff->size)
@@ -55,13 +74,22 @@ int strbuffer_append_bytes(strbuffer_t *strbuff, const char *data, int size)
         strbuff->value = realloc(strbuff->value, strbuff->size);
         if(!strbuff->value)
             return -1;
-
-        memset(strbuff->value + strbuff->length + size, 0,
-               strbuff->size - strbuff->length - size);
     }
 
     memcpy(strbuff->value + strbuff->length, data, size);
     strbuff->length += size;
+    strbuff->value[strbuff->length] = '\0';
 
     return 0;
 }
+
+char strbuffer_pop(strbuffer_t *strbuff)
+{
+    if(strbuff->length > 0) {
+        char c = strbuff->value[--strbuff->length];
+        strbuff->value[strbuff->length] = '\0';
+        return c;
+    }
+    else
+        return '\0';
+}