X-Git-Url: http://www.project-moonshot.org/gitweb/?a=blobdiff_plain;f=src%2Fstrbuffer.c;h=1a71a53d78d25d5d7af3f521cfaba63de0ff3323;hb=6637b976edd508cc9413ce954fe4275eab8c2c69;hp=6674f49265689f1b5dbd76b0ec5061223e0ac9a0;hpb=b1fe723a7f7261e1127ffb17c7ff564918e88203;p=jansson.git diff --git a/src/strbuffer.c b/src/strbuffer.c index 6674f49..1a71a53 100644 --- a/src/strbuffer.c +++ b/src/strbuffer.c @@ -1,3 +1,10 @@ +/* + * Copyright (c) 2009 Petri Lehtinen + * + * 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 #include @@ -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'; +}