projects
/
m6w6
/
libmemcached
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
|
github
raw
|
inline
| side by side
Kevin's patch bug13
[m6w6/libmemcached]
/
lib
/
memcached_response.c
diff --git
a/lib/memcached_response.c
b/lib/memcached_response.c
index a695e9d8c40881eb40ec7f589c6d29407c45eeb2..4b29a1cbbec259211ef3800954a580f13f4512f9 100644
(file)
--- a/
lib/memcached_response.c
+++ b/
lib/memcached_response.c
@@
-8,9
+8,9
@@
#include "common.h"
#include "memcached_io.h"
#include "common.h"
#include "memcached_io.h"
-memcached_return memcached_response(memcached_st *ptr,
+memcached_return memcached_response(memcached_s
erver_s
t *ptr,
char *buffer, size_t buffer_length,
char *buffer, size_t buffer_length,
-
unsigned int server_key
)
+
memcached_result_st *result
)
{
unsigned int x;
size_t send_length;
{
unsigned int x;
size_t send_length;
@@
-20,7
+20,11
@@
memcached_return memcached_response(memcached_st *ptr,
send_length= 0;
send_length= 0;
- max_messages= memcached_server_response_count(ptr, server_key);
+ /* We may have old commands in the buffer not set, first purge */
+ if (ptr->root->flags & MEM_NO_BLOCK)
+ (void)memcached_io_write(ptr, NULL, 0, 1);
+
+ max_messages= memcached_server_response_count(ptr);
for (x= 0; x < max_messages; x++)
{
size_t total_length= 0;
for (x= 0; x < max_messages; x++)
{
size_t total_length= 0;
@@
-30,8
+34,7
@@
memcached_return memcached_response(memcached_st *ptr,
{
unsigned int read_length;
{
unsigned int read_length;
- read_length= memcached_io_read(ptr, server_key,
- buffer_ptr, 1);
+ read_length= memcached_io_read(ptr, buffer_ptr, 1);
if (read_length != 1)
return MEMCACHED_UNKNOWN_READ_FAILURE;
if (read_length != 1)
return MEMCACHED_UNKNOWN_READ_FAILURE;
@@
-50,7
+53,7
@@
memcached_return memcached_response(memcached_st *ptr,
buffer_ptr++;
*buffer_ptr= 0;
buffer_ptr++;
*buffer_ptr= 0;
- memcached_server_response_decrement(ptr
, server_key
);
+ memcached_server_response_decrement(ptr);
}
switch(buffer[0])
}
switch(buffer[0])
@@
-58,9
+61,16
@@
memcached_return memcached_response(memcached_st *ptr,
case 'V': /* VALUE || VERSION */
if (buffer[1] == 'A') /* VALUE */
{
case 'V': /* VALUE || VERSION */
if (buffer[1] == 'A') /* VALUE */
{
+ memcached_return rc;
+
/* We add back in one because we will need to search for END */
/* We add back in one because we will need to search for END */
- memcached_server_response_increment(ptr, server_key);
- return MEMCACHED_SUCCESS;
+ memcached_server_response_increment(ptr);
+ if (result)
+ rc= value_fetch(ptr, buffer, result);
+ else
+ rc= value_fetch(ptr, buffer, &ptr->root->result);
+
+ return rc;
}
else if (buffer[1] == 'E') /* VERSION */
{
}
else if (buffer[1] == 'E') /* VERSION */
{
@@
-78,7
+88,7
@@
memcached_return memcached_response(memcached_st *ptr,
{
if (buffer[2] == 'A') /* STORED STATS */
{
{
if (buffer[2] == 'A') /* STORED STATS */
{
- memcached_server_response_increment(ptr
, server_key
);
+ memcached_server_response_increment(ptr);
return MEMCACHED_STAT;
}
else if (buffer[1] == 'E')
return MEMCACHED_STAT;
}
else if (buffer[1] == 'E')