X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=lib%2Fmemcached_connect.c;h=d0658f33e57d2e92c267b8442154d49cba06e7a2;hb=3e08799c9d80873a66e7e0b08c6524b0d5c47c28;hp=a0c8737c31df48e6e6b7b98e5549d06344408e42;hpb=875200dc0c5668bba4f8a68b487f9d2f2a1eedb0;p=m6w6%2Flibmemcached diff --git a/lib/memcached_connect.c b/lib/memcached_connect.c index a0c8737c..d0658f33 100644 --- a/lib/memcached_connect.c +++ b/lib/memcached_connect.c @@ -2,6 +2,9 @@ memcached_return memcached_server_add(memcached_st *ptr, char *hostname, unsigned int port) { + memcached_host_st *new_host_list; + char *new_hostname; + if (!port) port= MEMCACHED_DEFAULT_PORT; @@ -9,11 +12,23 @@ memcached_return memcached_server_add(memcached_st *ptr, char *hostname, unsigne hostname= "localhost"; - ptr->hosts= (memcached_host_st *)realloc(ptr->hosts, sizeof(memcached_host_st) * (ptr->number_of_hosts+1)); - ptr->hosts[ptr->number_of_hosts].hostname= + new_host_list= (memcached_host_st *)realloc(ptr->hosts, sizeof(memcached_host_st) * (ptr->number_of_hosts+1)); + memset((new_host_list + (sizeof(memcached_host_st) * ptr->number_of_hosts)) - sizeof(memcached_host_st), + 0, sizeof(memcached_host_st)); + + if (!new_host_list) + return MEMCACHED_MEMORY_ALLOCATION_FAILURE; + + ptr->hosts= new_host_list; + + new_hostname= (char *)malloc(sizeof(char) * (strlen(hostname)+1)); - memset(ptr->hosts[ptr->number_of_hosts].hostname, 0, strlen(hostname)+1); - memcpy(ptr->hosts[ptr->number_of_hosts].hostname, hostname, strlen(hostname)); + if (!new_hostname) + return MEMCACHED_MEMORY_ALLOCATION_FAILURE; + + memset(new_hostname, 0, strlen(hostname)+1); + memcpy(new_hostname, hostname, strlen(hostname)); + ptr->hosts[ptr->number_of_hosts].hostname= new_hostname; ptr->hosts[ptr->number_of_hosts].port= port; ptr->hosts[ptr->number_of_hosts].fd= -1; ptr->number_of_hosts++;