X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=lib%2Fmemcached_response.c;h=6f9e7c3341caa1be24830b6ec622ecae6ce7c779;hb=c09ad179bd7c11393db624c4228fae86c2eb1d23;hp=31b5911737f2820a39d4d1f36c0ab55c9e23e344;hpb=540b884236fe1e2d5e6cd52c70881d74e0fcea63;p=awesomized%2Flibmemcached diff --git a/lib/memcached_response.c b/lib/memcached_response.c index 31b59117..6f9e7c33 100644 --- a/lib/memcached_response.c +++ b/lib/memcached_response.c @@ -49,7 +49,10 @@ memcached_return memcached_response(memcached_server_st *ptr, WATCHPOINT_ASSERT(isgraph(*buffer_ptr) || isspace(*buffer_ptr)); if (read_length != 1) + { + memcached_io_reset(ptr); return MEMCACHED_UNKNOWN_READ_FAILURE; + } if (*buffer_ptr == '\n') break; @@ -60,7 +63,10 @@ memcached_return memcached_response(memcached_server_st *ptr, WATCHPOINT_ASSERT(total_length <= buffer_length); if (total_length >= buffer_length) + { + memcached_io_reset(ptr); return MEMCACHED_PROTOCOL_ERROR; + } } buffer_ptr++; *buffer_ptr= 0; @@ -92,6 +98,7 @@ memcached_return memcached_response(memcached_server_st *ptr, { WATCHPOINT_STRING(buffer); WATCHPOINT_ASSERT(0); + memcached_io_reset(ptr); return MEMCACHED_UNKNOWN_READ_FAILURE; } case 'O': /* OK */ @@ -111,6 +118,7 @@ memcached_return memcached_response(memcached_server_st *ptr, { WATCHPOINT_STRING(buffer); WATCHPOINT_ASSERT(0); + memcached_io_reset(ptr); return MEMCACHED_UNKNOWN_READ_FAILURE; } } @@ -123,20 +131,36 @@ memcached_return memcached_response(memcached_server_st *ptr, else if (buffer[4] == 'S') return MEMCACHED_NOTSTORED; else + { + memcached_io_reset(ptr); return MEMCACHED_UNKNOWN_READ_FAILURE; + } } case 'E': /* PROTOCOL ERROR or END */ { if (buffer[1] == 'N') return MEMCACHED_END; else if (buffer[1] == 'R') + { + memcached_io_reset(ptr); return MEMCACHED_PROTOCOL_ERROR; + } + else if (buffer[1] == 'X') + { + memcached_io_reset(ptr); + return MEMCACHED_DATA_EXISTS; + } else + { + memcached_io_reset(ptr); return MEMCACHED_UNKNOWN_READ_FAILURE; + } } case 'C': /* CLIENT ERROR */ + memcached_io_reset(ptr); return MEMCACHED_CLIENT_ERROR; default: + memcached_io_reset(ptr); return MEMCACHED_UNKNOWN_READ_FAILURE; }