X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=lib%2Fmemcached_string.c;h=247fbe475dd0506794add134d0c15bb47f3096db;hb=51ccc3f82cc9bab7cf05e3b07b8a8b319349bde0;hp=2bbda3fa1b8aee6be4e7199d48ef224f4d07d806;hpb=583fff6ac27c305e31e2b4b906f4e0702e26fee6;p=m6w6%2Flibmemcached diff --git a/lib/memcached_string.c b/lib/memcached_string.c index 2bbda3fa..247fbe47 100644 --- a/lib/memcached_string.c +++ b/lib/memcached_string.c @@ -27,10 +27,6 @@ memcached_return memcached_string_check(memcached_string_st *string, size_t need string->end= string->string + current_offset; string->current_size+= (string->block_size * adjust); - - /* We zero the block structure we just realloced */ - memset((string->string + current_offset), 0, - sizeof(char) * string->block_size); } return MEMCACHED_SUCCESS; @@ -74,6 +70,8 @@ memcached_return memcached_string_append_character(memcached_string_st *string, { memcached_return rc; + WATCHPOINT_ASSERT(string->is_allocated != MEMCACHED_USED); + rc= memcached_string_check(string, 1); if (rc != MEMCACHED_SUCCESS) @@ -90,6 +88,8 @@ memcached_return memcached_string_append(memcached_string_st *string, { memcached_return rc; + WATCHPOINT_ASSERT(string->is_allocated != MEMCACHED_USED); + rc= memcached_string_check(string, length); if (rc != MEMCACHED_SUCCESS) @@ -107,6 +107,8 @@ memcached_return memcached_string_append(memcached_string_st *string, size_t memcached_string_backspace(memcached_string_st *string, size_t remove) { + WATCHPOINT_ASSERT(string->is_allocated != MEMCACHED_USED); + if (string->end - string->string > remove) { size_t difference; @@ -124,26 +126,37 @@ size_t memcached_string_backspace(memcached_string_st *string, size_t remove) char *memcached_string_c_copy(memcached_string_st *string) { char *c_ptr; - c_ptr= (char *)malloc(memcached_string_length(string) * sizeof(char)); + + WATCHPOINT_ASSERT(string->is_allocated != MEMCACHED_USED); + + c_ptr= (char *)malloc((memcached_string_length(string)+1) * sizeof(char)); if (!c_ptr) return NULL; memcpy(c_ptr, memcached_string_value(string), memcached_string_length(string)); + c_ptr[memcached_string_length(string)]= 0; return c_ptr; } memcached_return memcached_string_reset(memcached_string_st *string) { + WATCHPOINT_ASSERT(string->is_allocated != MEMCACHED_USED); string->end= string->string; return MEMCACHED_SUCCESS; } -void memcached_string_free(memcached_string_st *string) +void memcached_string_free(memcached_string_st *ptr) { - if (string->string) - free(string->string); - if (string->is_allocated == MEMCACHED_ALLOCATED) - free(string); + if (ptr == NULL) + return; + + if (ptr->string) + free(ptr->string); + + if (ptr->is_allocated == MEMCACHED_ALLOCATED) + free(ptr); + else + ptr->is_allocated= MEMCACHED_USED; }