X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;ds=sidebyside;f=libmemcached%2Farray.c;h=5096b1874bed974bfc88e9561ca39a57be578b5f;hb=ad7ce5a1c9769432d8105c1a3a3a67b12d8bd731;hp=f8facbaa8cea5a861f254ef660ea8dfc4fc6efb6;hpb=1f5cf20c75c7187df1d648a5a200b52db3f17db1;p=m6w6%2Flibmemcached diff --git a/libmemcached/array.c b/libmemcached/array.c index f8facbaa..5096b187 100644 --- a/libmemcached/array.c +++ b/libmemcached/array.c @@ -35,30 +35,94 @@ * */ -#include - -#include "libmemcached/common.h" +#include +#include +#include struct memcached_array_st { + struct memcached_st *root; size_t size; char c_str[]; }; -memcached_array_st *memcached_strcpy(const char *str, size_t str_length) + +memcached_array_st *memcached_array_clone(struct memcached_st *memc, const memcached_array_st *original) { - memcached_array_st *array= (struct memcached_array_st *)malloc(sizeof(struct memcached_array_st) +str_length +1); + if (not original) + return NULL; + + return memcached_strcpy(memc, original->c_str, original->size); +} + +memcached_array_st *memcached_strcpy(struct memcached_st *memc, const char *str, size_t str_length) +{ + assert(memc); + assert(str); + assert(str_length); + + memcached_array_st *array= (struct memcached_array_st *)libmemcached_malloc(memc, sizeof(struct memcached_array_st) +str_length +1); - array->size= str_length; + if (not array) + return NULL; + + array->root= memc; + array->size= str_length; // We don't count the NULL ending memcpy(array->c_str, str, str_length); array->c_str[str_length]= 0; return array; } +bool memcached_array_is_null(memcached_array_st *array) +{ + assert(array); + assert(array->root); + + if (not array) + return false; + + if (array->size and array->c_str) + return false; + + assert(not array->size and not array->c_str); + + return true; +} + +memcached_string_t memcached_array_to_string(memcached_array_st *array) +{ + assert(array); + assert(array->c_str); + assert(array->size); + memcached_string_t tmp; + tmp.c_str= array->c_str; + tmp.size= array->size; + + return tmp; +} + void memcached_array_free(memcached_array_st *array) { - WATCHPOINT_ASSERT(array); - if (array) - free(array); + if (not array) + return; + + WATCHPOINT_ASSERT(array->root); + libmemcached_free(array->root, array); +} + +size_t memcached_array_size(memcached_array_st *array) +{ + if (not array) + return 0; + + return array->size; +} + +const char *memcached_array_string(memcached_array_st *array) +{ + if (not array) + return NULL; + + return array->c_str; }