X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=libmemcached%2Fmemcached_string.c;h=0911b409ea47cb8f3f5734137700b1b41e68fcc6;hb=1a92818ec19dd3e9ca4b6765a5765ca1a97dcfdc;hp=1595ec6108b9f00b69ea3293de0cabeeb847e32f;hpb=1d7f999b7d38db3308a0533a83fea23987fb0178;p=m6w6%2Flibmemcached diff --git a/libmemcached/memcached_string.c b/libmemcached/memcached_string.c index 1595ec61..0911b409 100644 --- a/libmemcached/memcached_string.c +++ b/libmemcached/memcached_string.c @@ -1,10 +1,10 @@ #include "common.h" -memcached_return memcached_string_check(memcached_string_st *string, size_t need) +inline static memcached_return _string_check(memcached_string_st *string, size_t need) { if (need && need > (size_t)(string->current_size - (size_t)(string->end - string->string))) { - size_t current_offset= string->end - string->string; + size_t current_offset= (size_t) (string->end - string->string); char *new_value; size_t adjust; size_t new_size; @@ -18,10 +18,7 @@ memcached_return memcached_string_check(memcached_string_st *string, size_t need if (new_size < need) return MEMCACHED_MEMORY_ALLOCATION_FAILURE; - if (string->root->call_realloc) - new_value= (char *)string->root->call_realloc(string->root, string->string, new_size); - else - new_value= (char *)realloc(string->string, new_size); + new_value= string->root->call_realloc(string->root, string->string, new_size); if (new_value == NULL) return MEMCACHED_MEMORY_ALLOCATION_FAILURE; @@ -35,42 +32,40 @@ 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; /* Saving malloc calls :) */ if (string) { + WATCHPOINT_ASSERT(memc->options.is_safe && string->options.is_initialized == false); + memset(string, 0, sizeof(memcached_string_st)); - string->is_allocated= MEMCACHED_NOT_ALLOCATED; } else { - if (ptr->call_malloc) - string= (memcached_string_st *)ptr->call_malloc(ptr, sizeof(memcached_string_st)); - else - string= (memcached_string_st *)malloc(sizeof(memcached_string_st)); + string= memc->call_calloc(memc, 1, sizeof(memcached_string_st)); if (string == NULL) + { return NULL; - memset(string, 0, sizeof(memcached_string_st)); - string->is_allocated= MEMCACHED_ALLOCATED; + } + + 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) { - if (ptr->call_free) - ptr->call_free(ptr, string); - else - free(string); - + memc->call_free(memc, string); return NULL; } + string->options.is_initialized= true; + WATCHPOINT_ASSERT(string->string == string->end); return string; @@ -81,27 +76,23 @@ 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); + rc= _string_check(string, 1); if (rc != MEMCACHED_SUCCESS) return rc; - *string->end= ' '; + *string->end= character; string->end++; return MEMCACHED_SUCCESS; } memcached_return memcached_string_append(memcached_string_st *string, - char *value, size_t length) + const char *value, size_t length) { memcached_return rc; - WATCHPOINT_ASSERT(string->is_allocated != MEMCACHED_USED); - - rc= memcached_string_check(string, length); + rc= _string_check(string, length); if (rc != MEMCACHED_SUCCESS) return rc; @@ -116,37 +107,14 @@ memcached_return memcached_string_append(memcached_string_st *string, return MEMCACHED_SUCCESS; } -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; - - difference= string->end - string->string; - string->end= string->string; - - return difference; - } - string->end-= remove; - - return remove; -} - char *memcached_string_c_copy(memcached_string_st *string) { char *c_ptr; - WATCHPOINT_ASSERT(string->is_allocated != MEMCACHED_USED); - if (memcached_string_length(string) == 0) return NULL; - if (string->root->call_malloc) - c_ptr= (char *)string->root->call_malloc(string->root, (memcached_string_length(string)+1) * sizeof(char)); - else - c_ptr= (char *)malloc((memcached_string_length(string)+1) * sizeof(char)); + c_ptr= string->root->call_malloc(string->root, (memcached_string_length(string)+1) * sizeof(char)); if (c_ptr == NULL) return NULL; @@ -159,7 +127,6 @@ char *memcached_string_c_copy(memcached_string_st *string) memcached_return memcached_string_reset(memcached_string_st *string) { - WATCHPOINT_ASSERT(string->is_allocated != MEMCACHED_USED); string->end= string->string; return MEMCACHED_SUCCESS; @@ -172,19 +139,22 @@ void memcached_string_free(memcached_string_st *ptr) if (ptr->string) { - if (ptr->root->call_free) - ptr->root->call_free(ptr->root, ptr->string); - else - free(ptr->string); + ptr->root->call_free(ptr->root, ptr->string); } - if (ptr->is_allocated == MEMCACHED_ALLOCATED) + if (memcached_is_allocated(ptr)) { - if (ptr->root->call_free) - ptr->root->call_free(ptr->root, ptr); - else - free(ptr); + ptr->root->call_free(ptr->root, ptr); } else - ptr->is_allocated= MEMCACHED_USED; + { + ptr->options.is_initialized= false; + memset(ptr, 0, sizeof(memcached_string_st)); + } +} + +memcached_return memcached_string_check(memcached_string_st *string, size_t need) +{ + return _string_check(string, need); } +