rc= MEMCACHED_CONNECTION_FAILURE;
}
+ if (rc == MEMCACHED_ERRNO and local_errno == ECONNRESET)
+ {
+ rc= MEMCACHED_CONNECTION_FAILURE;
+ }
+
if (local_errno == EINVAL)
{
rc= MEMCACHED_INVALID_ARGUMENTS;
{
#ifdef STRERROR_R_CHAR_P
errmsg_ptr= strerror_r(local_errno, errmsg, sizeof(errmsg));
-#else
+#elif defined(HAVE_STRERROR_R) && HAVE_STRERROR_R
strerror_r(local_errno, errmsg, sizeof(errmsg));
errmsg_ptr= errmsg;
+#elif defined(HAVE_STRERROR) && HAVE_STRERROR
+ snprintf(errmsg, sizeof(errmsg), "%s", strerror(local_errno));
+ errmsg_ptr= errmsg;
#endif
}
return memcached_set_error(self, rc, at, tmp);
}
+#ifndef __INTEL_COMPILER
+#pragma GCC diagnostic ignored "-Wformat-nonliteral"
+#endif
+
memcached_return_t memcached_set_error(memcached_st& memc, memcached_return_t rc, const char *at, memcached_string_t& str)
{
assert_msg(rc != MEMCACHED_ERRNO, "Programmer error, MEMCACHED_ERRNO was set to be returned to client");
{
assert_msg(rc != MEMCACHED_ERRNO, "Programmer error, MEMCACHED_ERRNO was set to be returned to client");
assert_msg(rc != MEMCACHED_SOME_ERRORS, "Programmer error, MEMCACHED_SOME_ERRORS was about to be set on a org::libmemcached::Instance");
- if (memcached_fatal(rc) == false)
+ if (memcached_fatal(rc) == false and rc != MEMCACHED_CLIENT_ERROR)
{
return rc;
}
memcached_string_t error_host= { hostname_port_message, size_t(size) };
- assert(self.root);
+ assert_msg(self.root, "Programmer error, root was not set on instance");
if (self.root == NULL)
{
return rc;
_set(self, (*self.root));
assert(self.root->error_messages);
assert(self.error_messages);
+ assert(self.error_messages->rc == self.root->error_messages->rc);
return rc;
}
_set(*self.root, &error_host, rc, at, local_errno);
_set(self, (*self.root));
+#if 0
+ if (self.root->error_messages->rc != self.error_messages->rc)
+ {
+ fprintf(stderr, "%s:%d %s != %s\n", __FILE__, __LINE__,
+ memcached_strerror(NULL, self.root->error_messages->rc),
+ memcached_strerror(NULL, self.error_messages->rc));
+ }
+#endif
+
return rc;
}
self.error_messages= NULL;
}
+const char *memcached_error(const memcached_st *memc)
+{
+ return memcached_last_error_message(memc);
+}
+
const char *memcached_last_error_message(const memcached_st *memc)
{
- if (memc == NULL)
+ if (memc)
{
- return memcached_strerror(memc, MEMCACHED_INVALID_ARGUMENTS);
- }
+ if (memc->error_messages)
+ {
+ if (memc->error_messages->size == 0)
+ {
+ return memc->error_messages->message;
+ }
- if (memc->error_messages == NULL)
- {
- return memcached_strerror(memc, MEMCACHED_SUCCESS);
- }
+ return memcached_strerror(memc, memc->error_messages->rc);
+ }
- if (memc->error_messages->size == 0)
- {
- return memcached_strerror(memc, memc->error_messages->rc);
+ return memcached_strerror(memc, MEMCACHED_SUCCESS);
}
- return memc->error_messages->message;
+ return memcached_strerror(memc, MEMCACHED_INVALID_ARGUMENTS);
}
bool memcached_has_current_error(memcached_st &memc)
memcached_return_t memcached_last_error(const memcached_st *memc)
{
- if (memc == NULL)
+ if (memc)
{
- return MEMCACHED_INVALID_ARGUMENTS;
- }
+ if (memc->error_messages)
+ {
+ return memc->error_messages->rc;
+ }
- if (memc->error_messages == NULL)
- {
return MEMCACHED_SUCCESS;
}
- return memc->error_messages->rc;
+ return MEMCACHED_INVALID_ARGUMENTS;
}
int memcached_last_error_errno(const memcached_st *memc)