X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=libmemcached%2Fmemcached_string.c;h=a12d6d968b2ac530247228e699f6bfc5746c0fe9;hb=b4de8d3fd063b9017797dd9809ab3acb8a537606;hp=614343c8c087d7703d6273b2e774fbc29b8c0eaa;hpb=177497693368fb7f68494e57e92bb9e68658334b;p=m6w6%2Flibmemcached diff --git a/libmemcached/memcached_string.c b/libmemcached/memcached_string.c index 614343c8..a12d6d96 100644 --- a/libmemcached/memcached_string.c +++ b/libmemcached/memcached_string.c @@ -1,6 +1,15 @@ +/* LibMemcached + * Copyright (C) 2006-2009 Brian Aker + * All rights reserved. + * + * Use and distribution licensed under the BSD license. See + * the COPYING file in the parent directory for full text. + * + */ + #include "common.h" -memcached_return memcached_string_check(memcached_string_st *string, size_t need) +inline static memcached_return_t _string_check(memcached_string_st *string, size_t need) { if (need && need > (size_t)(string->current_size - (size_t)(string->end - string->string))) { @@ -32,42 +41,51 @@ memcached_return memcached_string_check(memcached_string_st *string, size_t need return MEMCACHED_SUCCESS; } -memcached_string_st *memcached_string_create(memcached_st *ptr, memcached_string_st *string, size_t initial_size) +memcached_string_st *memcached_string_create(memcached_st *memc, memcached_string_st *string, size_t initial_size) { - memcached_return rc; + memcached_return_t rc; /* Saving malloc calls :) */ if (string) + { + WATCHPOINT_ASSERT(memc->options.is_safe && string->options.is_initialized == false); + memset(string, 0, sizeof(memcached_string_st)); + } else { - string= ptr->call_calloc(ptr, 1, sizeof(memcached_string_st)); + string= memc->call_calloc(memc, 1, sizeof(memcached_string_st)); if (string == NULL) + { return NULL; - string->is_allocated= true; + } + + string->options.is_allocated= true; } string->block_size= MEMCACHED_BLOCK_SIZE; - string->root= ptr; + string->root= memc; - rc= memcached_string_check(string, initial_size); + rc= _string_check(string, initial_size); if (rc != MEMCACHED_SUCCESS) { - ptr->call_free(ptr, string); + memc->call_free(memc, string); return NULL; } + string->options.is_initialized= true; + WATCHPOINT_ASSERT(string->string == string->end); return string; } -memcached_return memcached_string_append_character(memcached_string_st *string, +memcached_return_t memcached_string_append_character(memcached_string_st *string, char character) { - memcached_return rc; + memcached_return_t rc; - rc= memcached_string_check(string, 1); + rc= _string_check(string, 1); if (rc != MEMCACHED_SUCCESS) return rc; @@ -78,12 +96,12 @@ memcached_return memcached_string_append_character(memcached_string_st *string, return MEMCACHED_SUCCESS; } -memcached_return memcached_string_append(memcached_string_st *string, +memcached_return_t memcached_string_append(memcached_string_st *string, const char *value, size_t length) { - memcached_return rc; + memcached_return_t rc; - rc= memcached_string_check(string, length); + rc= _string_check(string, length); if (rc != MEMCACHED_SUCCESS) return rc; @@ -116,7 +134,7 @@ char *memcached_string_c_copy(memcached_string_st *string) return c_ptr; } -memcached_return memcached_string_reset(memcached_string_st *string) +memcached_return_t memcached_string_reset(memcached_string_st *string) { string->end= string->string; @@ -129,10 +147,23 @@ void memcached_string_free(memcached_string_st *ptr) return; if (ptr->string) + { ptr->root->call_free(ptr->root, ptr->string); + } - if (ptr->is_allocated) + if (memcached_is_allocated(ptr)) + { ptr->root->call_free(ptr->root, ptr); + } else + { + ptr->options.is_initialized= false; memset(ptr, 0, sizeof(memcached_string_st)); + } } + +memcached_return_t memcached_string_check(memcached_string_st *string, size_t need) +{ + return _string_check(string, need); +} +