X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=libmemcached%2Fmemcached_response.c;h=940c9f8844e26632181e09b404a9b8c277a75585;hb=refs%2Ftags%2F0.26;hp=5c44e5f2b78e494ac53d659d66827875faa196b3;hpb=d7de77de3f79dd9a478ee40dd034af45b6a3f8ef;p=awesomized%2Flibmemcached diff --git a/libmemcached/memcached_response.c b/libmemcached/memcached_response.c index 5c44e5f2..940c9f88 100644 --- a/libmemcached/memcached_response.c +++ b/libmemcached/memcached_response.c @@ -67,40 +67,11 @@ memcached_return memcached_response(memcached_server_st *ptr, return memcached_read_one_response(ptr, buffer, buffer_length, result); } -static memcached_return memcached_readline(memcached_server_st *ptr, - char *buffer, - size_t size) -{ - bool line_complete= false; - char *buffer_ptr= buffer; - int total_nr=0; - - while (!line_complete) - { - if (memcached_io_read(ptr, buffer_ptr, 1) != 1) - return MEMCACHED_UNKNOWN_READ_FAILURE; - - WATCHPOINT_ASSERT(*buffer_ptr != '\0'); - if (*buffer_ptr == '\n') - line_complete=true; - else - { - ++buffer_ptr; - ++total_nr; - } - - if (total_nr == size) - return MEMCACHED_PROTOCOL_ERROR; - } - - return MEMCACHED_SUCCESS; -} - static memcached_return textual_read_one_response(memcached_server_st *ptr, char *buffer, size_t buffer_length, memcached_result_st *result) { - memcached_return rc=memcached_readline(ptr, buffer, buffer_length); + memcached_return rc= memcached_io_readline(ptr, buffer, buffer_length); if (rc != MEMCACHED_SUCCESS) return rc; @@ -185,7 +156,7 @@ static memcached_return textual_read_one_response(memcached_server_st *ptr, } } - return MEMCACHED_SUCCESS; + /* NOTREACHED */ } char *memcached_result_value(memcached_result_st *ptr) @@ -329,14 +300,30 @@ static memcached_return binary_read_one_response(memcached_server_st *ptr, else if (header.response.bodylen) { /* What should I do with the error message??? just discard it for now */ - char buffer[SMALL_STRING_LEN]; + char hole[SMALL_STRING_LEN]; while (bodylen > 0) { size_t nr= (bodylen > SMALL_STRING_LEN) ? SMALL_STRING_LEN : bodylen; - if (memcached_safe_read(ptr, buffer, nr) != MEMCACHED_SUCCESS) + if (memcached_safe_read(ptr, hole, nr) != MEMCACHED_SUCCESS) return MEMCACHED_UNKNOWN_READ_FAILURE; bodylen -= nr; } + + /* This might be an error from one of the quiet commands.. if + * so, just throw it away and get the next one. What about creating + * a callback to the user with the error information? + */ + switch (header.response.opcode) + { + case PROTOCOL_BINARY_CMD_SETQ: + case PROTOCOL_BINARY_CMD_ADDQ: + case PROTOCOL_BINARY_CMD_REPLACEQ: + case PROTOCOL_BINARY_CMD_APPENDQ: + case PROTOCOL_BINARY_CMD_PREPENDQ: + return binary_read_one_response(ptr, buffer, buffer_length, result); + default: + break; + } } memcached_return rc= MEMCACHED_SUCCESS;