X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=libmemcached%2Farray.c;h=5f9066ce9fd689254556f7e234288e04695ed1bb;hb=6953ecee35a39d2303577ec92ca5ead4efa7ea7a;hp=f8facbaa8cea5a861f254ef660ea8dfc4fc6efb6;hpb=1f5cf20c75c7187df1d648a5a200b52db3f17db1;p=awesomized%2Flibmemcached diff --git a/libmemcached/array.c b/libmemcached/array.c index f8facbaa..5f9066ce 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 (original) + { + return memcached_strcpy(memc, original->c_str, original->size); + } + + return NULL; +} + +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; - memcpy(array->c_str, str, str_length); - array->c_str[str_length]= 0; + if (array) + { + 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) +{ + if (array) + { + return false; + } + + 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); + { + WATCHPOINT_ASSERT(array->root); + libmemcached_free(array->root, array); + } +} + +size_t memcached_array_size(memcached_array_st *array) +{ + if (array) + { + return array->size; + } + + return 0; +} + +const char *memcached_array_string(memcached_array_st *array) +{ + if (array) + { + return array->c_str; + } + + return NULL; }