{
*key_length= 0;
- for (; end_ptr > string_ptr && *string_ptr != ' '; string_ptr++)
+ for (; isalnum(*string_ptr); string_ptr++)
{
*key= *string_ptr;
key++;
}
}
else /* Skip characters */
- for (; end_ptr > string_ptr && *string_ptr != ' '; string_ptr++);
+ for (; isalnum(*string_ptr); string_ptr++);
if (end_ptr == string_ptr)
goto read_error;
string_ptr++;
if (end_ptr == string_ptr)
goto read_error;
- for (next_ptr= string_ptr; end_ptr > string_ptr && *string_ptr != ' '; string_ptr++);
+ for (next_ptr= string_ptr; isdigit(*string_ptr); string_ptr++);
*flags= (uint16_t)strtol(next_ptr, &string_ptr, 10);
if (end_ptr == string_ptr)
if (end_ptr == string_ptr)
goto read_error;
- for (next_ptr= string_ptr; end_ptr > string_ptr && *string_ptr != ' '; string_ptr++);
+ for (next_ptr= string_ptr; isdigit(*string_ptr); string_ptr++);
value_length= (size_t)strtoll(next_ptr, &string_ptr, 10);
if (end_ptr == string_ptr)
else
{
string_ptr++;
- for (next_ptr= string_ptr; end_ptr > string_ptr && *string_ptr != ' '; string_ptr++);
+ for (next_ptr= string_ptr; isdigit(*string_ptr); string_ptr++);
if (cas)
*cas= (size_t)strtoll(next_ptr, &string_ptr, 10);
}
LIBMEMCACHED_MEMCACHED_GET_END();
-
- return memcached_string_c_copy(result_buffer);
+ return memcached_string_c_copy(result_buffer);
error:
*value_length= 0;
LIBMEMCACHED_MEMCACHED_GET_END();
- return NULL;
+ return NULL;
}
memcached_return memcached_mget(memcached_st *ptr,
}
else if (*error == MEMCACHED_END && memcached_string_length((memcached_string_st *)(&result->value)) == 0)
{
- goto error;
+ break;
}
else if (*error == MEMCACHED_END)
{
WATCHPOINT_ASSERT(0); /* If this happens we have somehow messed up the fetch */
- goto error;
+ break;
}
else if (*error != MEMCACHED_SUCCESS)
{
- goto error;
+ break;
}
else
{
}
}
-error:
- memcached_string_reset(&result->value);
+ /* An error has occurred */
+ if (result->is_allocated == MEMCACHED_ALLOCATED)
+ memcached_result_free(result);
+ else
+ memcached_string_reset(&result->value);
return NULL;
}
unsigned int port,
memcached_connection type);
-static void host_reset(memcached_server_st *host, char *new_hostname, unsigned int port,
+static void host_reset(memcached_server_st *host, char *hostname, unsigned int port,
memcached_connection type)
{
memset(host, 0, sizeof(memcached_server_st));
- host->hostname= new_hostname;
+ host->hostname= strdup(hostname);
host->port= port;
host->fd= -1;
host->type= type;
memcached_return memcached_server_push(memcached_st *ptr, memcached_server_st *list)
{
unsigned int x;
- unsigned int count;
+ uint16_t count;
memcached_server_st *new_host_list;
if (!list)
return MEMCACHED_SUCCESS;
- for (count= 0; list[count].hostname; count++);
+ count= list[0].count;
new_host_list=
(memcached_server_st *)realloc(ptr->hosts,
- sizeof(memcached_server_st) * (count + ptr->number_of_hosts + 1));
+ sizeof(memcached_server_st) * (count + ptr->number_of_hosts));
if (!new_host_list)
return MEMCACHED_MEMORY_ALLOCATION_FAILURE;
ptr->hosts= new_host_list;
- for (x= 0; list[x].hostname; x++)
+ for (x= 0; x < count; x++)
{
- ptr->hosts[ptr->number_of_hosts].hostname= strdup(list[x].hostname);
- ptr->hosts[ptr->number_of_hosts].port= list[x].port;
- ptr->hosts[ptr->number_of_hosts].fd= list[x].fd;
- ptr->hosts[ptr->number_of_hosts].stack_responses= list[x].stack_responses;
- ptr->hosts[ptr->number_of_hosts].cursor_active= list[x].cursor_active;
- ptr->hosts[ptr->number_of_hosts].type= list[x].type;
+ WATCHPOINT_ASSERT(list[x].hostname);
+ host_reset(&ptr->hosts[ptr->number_of_hosts], list[x].hostname,
+ list[x].port, list[x].type);
ptr->number_of_hosts++;
}
- host_reset(&ptr->hosts[ptr->number_of_hosts], NULL, 0,
- MEMCACHED_CONNECTION_UNKNOWN);
+ ptr->hosts[0].count= ptr->number_of_hosts;
return MEMCACHED_SUCCESS;
}
memcached_connection type)
{
memcached_server_st *new_host_list;
- char *new_hostname;
LIBMEMCACHED_MEMCACHED_SERVER_ADD_START();
- if (ptr->number_of_hosts)
- {
- new_host_list= (memcached_server_st *)realloc(ptr->hosts,
- sizeof(memcached_server_st) * (ptr->number_of_hosts+1));
- if (!new_host_list)
- return MEMCACHED_MEMORY_ALLOCATION_FAILURE;
- host_reset(&new_host_list[ptr->number_of_hosts], NULL, 0,
- MEMCACHED_CONNECTION_UNKNOWN);
- }
- else
- {
- new_host_list=
- (memcached_server_st *)malloc(sizeof(memcached_server_st) * 2);
- if (!new_host_list)
- return MEMCACHED_MEMORY_ALLOCATION_FAILURE;
- host_reset(&new_host_list[0], NULL, 0, MEMCACHED_CONNECTION_UNKNOWN);
- host_reset(&new_host_list[1], NULL, 0, MEMCACHED_CONNECTION_UNKNOWN);
- }
+ new_host_list= (memcached_server_st *)realloc(ptr->hosts,
+ sizeof(memcached_server_st) * (ptr->number_of_hosts+1));
+ if (!new_host_list)
+ return MEMCACHED_MEMORY_ALLOCATION_FAILURE;
ptr->hosts= new_host_list;
- new_hostname=
- (char *)malloc(sizeof(char) * (strlen(hostname)+1));
-
- if (!new_hostname)
- return MEMCACHED_MEMORY_ALLOCATION_FAILURE;
-
- memcpy(new_hostname, hostname, strlen(hostname));
- new_hostname[strlen(hostname)]= 0;
- host_reset(&ptr->hosts[ptr->number_of_hosts], new_hostname, port, type);
+ host_reset(&ptr->hosts[ptr->number_of_hosts], hostname, port, type);
ptr->number_of_hosts++;
+ ptr->hosts[0].count++;
LIBMEMCACHED_MEMCACHED_SERVER_ADD_END();
{
unsigned int count;
memcached_server_st *new_host_list;
- char *new_hostname;
if (!hostname)
return ptr;
if (!port)
port= MEMCACHED_DEFAULT_PORT;
- /* Always count so that we keep a free host at the end */
- if (ptr)
+ /* Increment count for hosts */
+ count= 1;
+ if (ptr != NULL)
{
- for (count= 0; ptr[count].hostname; count++);
- count+= 2;
- new_host_list= (memcached_server_st *)realloc(ptr, sizeof(memcached_server_st) * count);
- if (!new_host_list)
- goto error;
- host_reset(&new_host_list[count-1], NULL, 0, MEMCACHED_CONNECTION_UNKNOWN);
- }
- else
+ count+= ptr[0].count;
+ }
+
+ new_host_list= (memcached_server_st *)realloc(ptr, sizeof(memcached_server_st) * count);
+ if (!new_host_list)
{
- count= 2;
- new_host_list= (memcached_server_st *)malloc(sizeof(memcached_server_st) * count);
- if (!new_host_list)
- goto error;
- host_reset(&new_host_list[0], NULL, 0, MEMCACHED_CONNECTION_UNKNOWN);
- host_reset(&new_host_list[1], NULL, 0, MEMCACHED_CONNECTION_UNKNOWN);
+ *error= MEMCACHED_MEMORY_ALLOCATION_FAILURE;
+ return NULL;
}
- new_hostname= strdup(hostname);
-
- if (!new_hostname)
- goto error;
+ host_reset(&new_host_list[count-1], hostname, port, MEMCACHED_CONNECTION_TCP);
+ new_host_list[0].count++;
- host_reset(&new_host_list[count-2], new_hostname, port, MEMCACHED_CONNECTION_TCP);
*error= MEMCACHED_SUCCESS;
return new_host_list;
-error:
- *error= MEMCACHED_MEMORY_ALLOCATION_FAILURE;
-
- return NULL;
}
unsigned int memcached_server_list_count(memcached_server_st *ptr)
{
- unsigned int x;
- for (x= 0; ptr[x].hostname; x++);
-
- return x;
+ if (ptr == NULL)
+ return 0;
+
+ return ptr[0].count;
}
void memcached_server_list_free(memcached_server_st *ptr)
{
unsigned int x;
- for (x= 0; ptr[x].hostname; x++)
+ if (ptr == NULL)
+ return;
+
+ for (x= 0; x < ptr[0].count; x++)
free(ptr[x].hostname);
free(ptr);
assert(!memcmp(value, "we the people", strlen("we the people")));
assert(strlen("we the people") == value_length);
assert(rc == MEMCACHED_SUCCESS);
+ free(value);
return 0;
}
store_ptr= (unsigned int *)value;
x= 0;
- while (*store_ptr)
+ while ((size_t)store_ptr < (size_t)(value + value_length))
{
assert(*store_ptr == store_list[x++]);
store_ptr++;
}
+ free(value);
return 0;
}
assert(!memcmp(value, "we the people", strlen("we the people")));
assert(strlen("we the people") == value_length);
assert(rc == MEMCACHED_SUCCESS);
+ free(value);
return 0;
}
return 0;
}
+uint8_t cleanup_pairs(memcached_st *memc)
+{
+ pairs_free(global_pairs);
+
+ return 0;
+}
+
uint8_t generate_data(memcached_st *memc)
{
unsigned long long x;
{"get_read", 0, get_read },
{"mget_read", 0, mget_read },
{"mget_read_result", 0, mget_read_result },
+ {"cleanup", 0, cleanup_pairs },
{0, 0, 0}
};