X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=libmemcached%2Fstring.cc;h=6f3b9c1c571a4e5e9ccc5685eb59a6bcb35ec3ea;hb=50dc8599f105fe915607e6f2d57851fd9acad839;hp=9e029627131392a6163761d5d01c8f2d4282688c;hpb=a6c3e3a3d04f379b1480c8c88a8eae17e54b1449;p=m6w6%2Flibmemcached diff --git a/libmemcached/string.cc b/libmemcached/string.cc index 9e029627..6f3b9c1c 100644 --- a/libmemcached/string.cc +++ b/libmemcached/string.cc @@ -37,6 +37,7 @@ #include +#include inline static memcached_return_t _string_check(memcached_string_st *string, size_t need) { @@ -118,6 +119,18 @@ memcached_string_st *memcached_string_create(memcached_st *memc, memcached_strin return self; } +static memcached_return_t memcached_string_append_null(memcached_string_st *string) +{ + if (memcached_failed(_string_check(string, 1))) + { + return MEMCACHED_MEMORY_ALLOCATION_FAILURE; + } + + *string->end= 0; + + return MEMCACHED_SUCCESS; +} + memcached_return_t memcached_string_append_character(memcached_string_st *string, char character) { @@ -213,6 +226,22 @@ const char *memcached_string_value(const memcached_string_st *self) return self->string; } +char *memcached_string_take_value(memcached_string_st *self) +{ + assert(self); + // If we fail at adding the null, we copy and move on + if (memcached_success(memcached_string_append_null(self))) + { + return memcached_string_c_copy(self); + } + + char *value= self->string; + + _init_string(self); + + return value; +} + char *memcached_string_value_mutable(const memcached_string_st *self) { return self->string;