X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=libmemcached%2Fstring.cc;h=89b33e1180069707c1396c9e2ea9a5f05894f4a6;hb=56a083d9a9b9887fc48890526d323fbc44e487b5;hp=268a437fbe91f6b984d53d4b5c93d6aee4de407a;hpb=1e8bc3cb173d8b4e206363de7fdabeddb32d0f53;p=m6w6%2Flibmemcached diff --git a/libmemcached/string.cc b/libmemcached/string.cc index 268a437f..89b33e11 100644 --- a/libmemcached/string.cc +++ b/libmemcached/string.cc @@ -122,6 +122,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; +} + static memcached_return_t memcached_string_append_null(memcached_string_st *string) { if (memcached_failed(_string_check(string, 1))) @@ -186,6 +198,18 @@ char *memcached_string_c_copy(memcached_string_st *string) return c_ptr; } +bool memcached_string_set(memcached_string_st& string, const char* value, size_t length) +{ + memcached_string_reset(&string); + if (memcached_success(memcached_string_append(&string, value, length))) + { + memcached_string_append_null(string); + return true; + } + + return false; +} + void memcached_string_reset(memcached_string_st *string) { string->end= string->string; @@ -255,16 +279,21 @@ const char *memcached_string_value(const memcached_string_st& self) char *memcached_string_take_value(memcached_string_st *self) { - assert_msg(self, "Invalid memcached_string_st"); - // If we fail at adding the null, we copy and move on - if (memcached_success(memcached_string_append_null(self))) + char* value= NULL; + + if (memcached_string_length(self)) { - return memcached_string_c_copy(self); - } + assert_msg(self, "Invalid memcached_string_st"); + // 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; + value= self->string; - _init_string(self); + _init_string(self); + } return value; }