X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=libmemcached%2Fresponse.cc;h=96772ff380ac064d6182da66dd94ae6f89f04c97;hb=53aa3021fa0dea4c4bebdd05b7f7c5a212184e69;hp=67b0999f7f2afff67e462ec9c2c5a4894577aea8;hpb=facfe08e21d2c3135c508ff098ff603ddaacef3e;p=awesomized%2Flibmemcached diff --git a/libmemcached/response.cc b/libmemcached/response.cc index 67b0999f..96772ff3 100644 --- a/libmemcached/response.cc +++ b/libmemcached/response.cc @@ -416,7 +416,17 @@ static memcached_return_t textual_read_one_response(org::libmemcached::Instance* and buffer[6] == '_' and buffer[7] == 'E' and buffer[8] == 'R' and buffer[9] == 'R' and buffer[10] == 'O' and buffer[11] == 'R') { - return MEMCACHED_CLIENT_ERROR; + // Move past the basic error message and whitespace + char *startptr= buffer + memcached_literal_param_size("CLIENT_ERROR"); + if (startptr[0] == ' ') + { + startptr++; + } + + char *endptr= startptr; + while (*endptr != '\r' && *endptr != '\n') endptr++; + + return memcached_set_error(*instance, MEMCACHED_CLIENT_ERROR, MEMCACHED_AT, startptr, size_t(endptr - startptr)); } } break; @@ -648,7 +658,11 @@ static memcached_return_t binary_read_one_response(org::libmemcached::Instance* case PROTOCOL_BINARY_CMD_DELETE: case PROTOCOL_BINARY_CMD_TOUCH: { - WATCHPOINT_ASSERT(bodylen == 0); + if (bodylen != 0) + { + char touch_buffer[32]; // @todo document this number + rc= memcached_safe_read(instance, buffer, sizeof(touch_buffer)); + } return MEMCACHED_SUCCESS; } @@ -795,7 +809,7 @@ static memcached_return_t _read_one_response(org::libmemcached::Instance* instan if (result == NULL) { - memcached_st *root= (memcached_st *)instance->root; + Memcached *root= (Memcached *)instance->root; result = &root->result; }