X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=libmemcached%2Farray.c;h=2412369e2a4199d81815d5d04cad496b4602ddcd;hb=2df9084da8c73d8813f8740e88cd70fe63dd742c;hp=f8facbaa8cea5a861f254ef660ea8dfc4fc6efb6;hpb=1f5cf20c75c7187df1d648a5a200b52db3f17db1;p=m6w6%2Flibmemcached diff --git a/libmemcached/array.c b/libmemcached/array.c index f8facbaa..2412369e 100644 --- a/libmemcached/array.c +++ b/libmemcached/array.c @@ -35,30 +35,75 @@ * */ -#include - #include "libmemcached/common.h" struct memcached_array_st { + 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(memcached_st *memc, const memcached_array_st *original) +{ + if (! original) + return NULL; + + return memcached_strcpy(memc, original->c_str, original->size); +} + +memcached_array_st *memcached_strcpy(memcached_st *memc, const char *str, size_t str_length) { - memcached_array_st *array= (struct memcached_array_st *)malloc(sizeof(struct memcached_array_st) +str_length +1); + memcached_array_st *array= (struct memcached_array_st *)libmemcached_malloc(memc, sizeof(struct memcached_array_st) +str_length +1); - array->size= str_length; + if (! array) + return NULL; + + array->root= memc; + array->size= str_length -1; // We don't count the NULL ending memcpy(array->c_str, str, str_length); array->c_str[str_length]= 0; return array; } +memcached_string_t memcached_array_to_string(memcached_array_st *array) +{ + 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) + if (! array) + return; + + WATCHPOINT_ASSERT(array->root); + if (array && array->root) + { + libmemcached_free(array->root, array); + } + else if (array) + { free(array); + } +} + +size_t memcached_array_size(memcached_array_st *array) +{ + if (! array) + return 0; + + return array->size; +} + +const char *memcached_array_string(memcached_array_st *array) +{ + if (! array) + return NULL; + + return array->c_str; }