Make sure we use the correct strerror() in case someone is using threads.
authorBrian Aker <brian@tangent.org>
Fri, 17 Jun 2011 21:18:54 +0000 (14:18 -0700)
committerBrian Aker <brian@tangent.org>
Fri, 17 Jun 2011 21:18:54 +0000 (14:18 -0700)
libmemcached/error.cc

index 49375097db884b9555e34d6836c4fafc2a3cd296..5cfb4be29f6f3c45e9699c472b8f2520b65f90cf 100644 (file)
@@ -99,18 +99,35 @@ static void _set(memcached_st& memc, memcached_string_t *str, memcached_return_t
   error->rc= rc;
   error->local_errno= local_errno;
 
+  const char *errmsg_ptr;
+  char errmsg[MAX_ERROR_LENGTH];
+  errmsg[0]= 0;
+  errmsg_ptr= errmsg;
+
+  if (local_errno)
+  {
+#ifdef STRERROR_R_CHAR_P
+    errmsg_ptr= strerror_r(local_errno, errmsg, sizeof(errmsg));
+#else
+    strerror_r(local_errno, errmsg, sizeof(errmsg));
+    errmsg_ptr= errmsg;
+#endif
+  }
+
+
   if (str and str->size and local_errno)
   {
     error->size= (int)snprintf(error->message, MAX_ERROR_LENGTH, "%s(%s), %.*s -> %s", 
                                memcached_strerror(&memc, rc), 
-                               strerror(local_errno),
+                               errmsg_ptr,
                                memcached_string_printf(*str), at);
   }
   else if (local_errno)
   {
     error->size= (int)snprintf(error->message, MAX_ERROR_LENGTH, "%s(%s) -> %s", 
                                memcached_strerror(&memc, rc), 
-                               strerror(local_errno), at);
+                               errmsg_ptr,
+                               at);
   }
   else if (str and str->size)
   {