X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=libmemcached%2Ferror.c;h=81f6504d41785c4a0caa9dc838a977d996b17d87;hb=3dee67d04099cc5e2986ed94aa612f429f54d6fb;hp=206e1b41ae02e05b948795e8f3a9681378847858;hpb=1f5cf20c75c7187df1d648a5a200b52db3f17db1;p=awesomized%2Flibmemcached diff --git a/libmemcached/error.c b/libmemcached/error.c index 206e1b41..81f6504d 100644 --- a/libmemcached/error.c +++ b/libmemcached/error.c @@ -64,8 +64,12 @@ static memcached_error_st *_set(memcached_st *memc, memcached_string_t *str) { error->size= str->size; memcpy(error->c_str, str->c_str, str->size); + error->c_str[str->size]= 0; + } + else + { + error->size= 0; } - error->c_str[(str ? str->size :0)]= 0; error->next= memc->error_messages; memc->error_messages= error; @@ -73,6 +77,14 @@ static memcached_error_st *_set(memcached_st *memc, memcached_string_t *str) return error; } +memcached_return_t memcached_set_error_string(memcached_st *memc, memcached_return_t rc, const char *str, size_t length) +{ + memcached_string_t tmp; + tmp.c_str= str; + tmp.size= length; + return memcached_set_error(memc, rc, &tmp); +} + memcached_return_t memcached_set_error(memcached_st *memc, memcached_return_t rc, memcached_string_t *str) { if (rc == MEMCACHED_SUCCESS) @@ -102,6 +114,31 @@ memcached_return_t memcached_set_errno(memcached_st *memc, int local_errno, memc return error->rc; } +static void _error_print(const memcached_error_st *error) +{ + if (! error) + return; + + if (! error->size) + { + fprintf(stderr, "%s\n", memcached_strerror(NULL, error->rc) ); + } + else + { + fprintf(stderr, "%s %s\n", memcached_strerror(NULL, error->rc), error->c_str); + } + + _error_print(error->next); +} + +void memcached_error_print(const memcached_st *self) +{ + if (! self) + return; + + _error_print(self->error_messages); +} + static void _error_free(memcached_error_st *error) { if (! error) @@ -135,7 +172,7 @@ const char *memcached_last_error_message(memcached_st *memc) if (! memc->error_messages) return memcached_strerror(memc, MEMCACHED_SUCCESS); - if (! memc->error_messages->c_str) + if (! memc->error_messages->size) { return memcached_strerror(memc, memc->error_messages->rc); }