X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=libmemcached%2Ferror.cc;h=f4ce85d0c70498383518502eb8d46950de0091a3;hb=bf8213041709c75147393c8bd6b51b8f9e064f7c;hp=6ae5cba18342e0ecb92d95181035c8f5e107a69b;hpb=af788b4b866ef0220dcdc4c357efbcbdb942cd27;p=m6w6%2Flibmemcached diff --git a/libmemcached/error.cc b/libmemcached/error.cc index 6ae5cba1..f4ce85d0 100644 --- a/libmemcached/error.cc +++ b/libmemcached/error.cc @@ -36,7 +36,9 @@ */ #include +#include #include +#include #define MAX_ERROR_LENGTH 2048 struct memcached_error_t @@ -50,7 +52,7 @@ struct memcached_error_t char message[MAX_ERROR_LENGTH]; }; -static void _set(org::libmemcached::Instance& server, memcached_st& memc) +static void _set(org::libmemcached::Instance& server, Memcached& memc) { if (server.error_messages and server.error_messages->query_id != server.root->query_id) { @@ -139,48 +141,51 @@ static void _set(memcached_st& memc, memcached_string_t *str, memcached_return_t if (local_errno) { -#ifdef STRERROR_R_CHAR_P +#if defined(STRERROR_R_CHAR_P) && 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 } if (str and str->size and local_errno) { - error->size= (int)snprintf(error->message, MAX_ERROR_LENGTH, "(%lu) %s(%s), %.*s -> %s", - long(error->root), + error->size= (int)snprintf(error->message, MAX_ERROR_LENGTH, "(%p) %s(%s), %.*s -> %s", + error->root, memcached_strerror(&memc, rc), errmsg_ptr, memcached_string_printf(*str), at); } else if (local_errno) { - error->size= (int)snprintf(error->message, MAX_ERROR_LENGTH, "(%lu) %s(%s) -> %s", - long(error->root), + error->size= (int)snprintf(error->message, MAX_ERROR_LENGTH, "(%p) %s(%s) -> %s", + error->root, memcached_strerror(&memc, rc), errmsg_ptr, at); } else if (rc == MEMCACHED_PARSE_ERROR and str and str->size) { - error->size= (int)snprintf(error->message, MAX_ERROR_LENGTH, "(%lu) %.*s -> %s", - long(error->root), + error->size= (int)snprintf(error->message, MAX_ERROR_LENGTH, "(%p) %.*s -> %s", + error->root, int(str->size), str->c_str, at); } else if (str and str->size) { - error->size= (int)snprintf(error->message, MAX_ERROR_LENGTH, "(%lu) %s, %.*s -> %s", - long(error->root), + error->size= (int)snprintf(error->message, MAX_ERROR_LENGTH, "(%p) %s, %.*s -> %s", + error->root, memcached_strerror(&memc, rc), int(str->size), str->c_str, at); } else { - error->size= (int)snprintf(error->message, MAX_ERROR_LENGTH, "(%lu) %s -> %s", - long(error->root), + error->size= (int)snprintf(error->message, MAX_ERROR_LENGTH, "(%p) %s -> %s", + error->root, memcached_strerror(&memc, rc), at); } @@ -218,6 +223,10 @@ memcached_return_t memcached_set_error(org::libmemcached::Instance& self, memcac 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"); @@ -269,7 +278,7 @@ memcached_return_t memcached_set_error(org::libmemcached::Instance& self, memcac { 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; } @@ -288,7 +297,7 @@ memcached_return_t memcached_set_error(org::libmemcached::Instance& self, memcac 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; @@ -298,6 +307,7 @@ memcached_return_t memcached_set_error(org::libmemcached::Instance& self, memcac _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; } @@ -310,7 +320,7 @@ memcached_return_t memcached_set_error(org::libmemcached::Instance& self, memcac return rc; } - char hostname_port[NI_MAXHOST +NI_MAXSERV + sizeof("host : ")]; + char hostname_port[MEMCACHED_NI_MAXHOST +MEMCACHED_NI_MAXSERV + sizeof("host : ")]; size_t size= append_host_to_string(self, hostname_port, sizeof(hostname_port)); memcached_string_t error_host= { hostname_port, size}; @@ -404,6 +414,15 @@ memcached_return_t memcached_set_errno(org::libmemcached::Instance& self, int lo _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; } @@ -450,8 +469,9 @@ static void _error_print(const memcached_error_t *error) _error_print(error->next); } -void memcached_error_print(const memcached_st *self) +void memcached_error_print(const memcached_st *shell) { + const Memcached* self= memcached2Memcached(shell); if (self == NULL) { return; @@ -500,8 +520,9 @@ const char *memcached_error(const memcached_st *memc) return memcached_last_error_message(memc); } -const char *memcached_last_error_message(const memcached_st *memc) +const char *memcached_last_error_message(const memcached_st *shell) { + const Memcached* memc= memcached2Memcached(shell); if (memc) { if (memc->error_messages) @@ -537,8 +558,9 @@ bool memcached_has_current_error(org::libmemcached::Instance& server) return memcached_has_current_error(*(server.root)); } -memcached_return_t memcached_last_error(const memcached_st *memc) +memcached_return_t memcached_last_error(const memcached_st *shell) { + const Memcached* memc= memcached2Memcached(shell); if (memc) { if (memc->error_messages) @@ -552,8 +574,9 @@ memcached_return_t memcached_last_error(const memcached_st *memc) return MEMCACHED_INVALID_ARGUMENTS; } -int memcached_last_error_errno(const memcached_st *memc) +int memcached_last_error_errno(const memcached_st *shell) { + const Memcached* memc= memcached2Memcached(shell); if (memc == NULL) { return 0;