Store up errno in a couple of spots.
[awesomized/libmemcached] / libmemcached / string.c
index 3a6ee9ace41375bd16f84594cf43289b93a939e5..34597067b157edcbb818100da12a79061bbbd5d0 100644 (file)
@@ -32,7 +32,9 @@ inline static memcached_return_t _string_check(memcached_string_st *string, size
     new_value= libmemcached_realloc(string->root, string->string, new_size);
 
     if (new_value == NULL)
+    {
       return MEMCACHED_MEMORY_ALLOCATION_FAILURE;
+    }
 
     string->string= new_value;
     string->end= string->string + current_offset;
@@ -80,7 +82,12 @@ memcached_string_st *memcached_string_create(const memcached_st *memc, memcached
   rc=  _string_check(self, initial_size);
   if (rc != MEMCACHED_SUCCESS)
   {
+    if (rc == MEMCACHED_MEMORY_ALLOCATION_FAILURE)
+    {
+      ((memcached_st *)memc)->cached_errno= errno;
+    }
     libmemcached_free(memc, self);
+
     return NULL;
   }
 
@@ -99,7 +106,9 @@ memcached_return_t memcached_string_append_character(memcached_string_st *string
   rc=  _string_check(string, 1);
 
   if (rc != MEMCACHED_SUCCESS)
+  {
     return rc;
+  }
 
   *string->end= character;
   string->end++;
@@ -115,7 +124,9 @@ memcached_return_t memcached_string_append(memcached_string_st *string,
   rc= _string_check(string, length);
 
   if (rc != MEMCACHED_SUCCESS)
+  {
     return rc;
+  }
 
   WATCHPOINT_ASSERT(length <= string->current_size);
   WATCHPOINT_ASSERT(string->string);
@@ -177,22 +188,27 @@ memcached_return_t memcached_string_check(memcached_string_st *string, size_t ne
   return _string_check(string, need);
 }
 
-inline size_t memcached_string_length(const memcached_string_st *self)
+size_t memcached_string_length(const memcached_string_st *self)
 {
   return (size_t)(self->end - self->string);
 }
 
-inline size_t memcached_string_size(const memcached_string_st *self)
+size_t memcached_string_size(const memcached_string_st *self)
 {
   return self->current_size;
 }
 
-inline const char *memcached_string_value(const memcached_string_st *self)
+const char *memcached_string_value(const memcached_string_st *self)
 {
   return self->string;
 }
 
-inline char *memcached_string_value_mutable(const memcached_string_st *self)
+char *memcached_string_value_mutable(const memcached_string_st *self)
 {
   return self->string;
 }
+
+void memcached_string_set_length(memcached_string_st *self, size_t length)
+{
+  self->end= self->string + length;
+}