Removed dumb bug concerning set (was still using a buffer).
[m6w6/libmemcached] / src / utilities.c
index 5dd66f62731d871651d16eb7a5232bc39797a006..ce6cd925bdc76d566ca15d4a5243d71102e32a47 100644 (file)
@@ -1,14 +1,23 @@
 #include <memcached.h>
 
+static char **cleanup_list= NULL;
+static char cleanup_list_length= 0;
+
 void parse_opt_servers(memcached_st *memc,
-                       char *opt_servers)
+                       char *server_strings)
 {
   char *string;
   unsigned int port;
   char *begin_ptr;
+  char *end_ptr;
+
+  end_ptr= server_strings + strlen(server_strings);
+
+  assert(server_strings);
+  assert(memc);
 
-  for (begin_ptr= opt_servers, string= index(opt_servers, ','); 
-       begin_ptr[0]
+  for (begin_ptr= server_strings, string= index(server_strings, ','); 
+       begin_ptr == end_ptr
        begin_ptr= ++string, string= index(begin_ptr, ','))
   {
     char buffer[HUGE_STRING_LEN];
@@ -21,9 +30,9 @@ void parse_opt_servers(memcached_st *memc,
     }
     else
     {
-      size_t length= strlen(opt_servers);
+      size_t length= strlen(server_strings);
       memcpy(buffer, begin_ptr, length);
-      string= opt_servers+length;
+      string= server_strings+length;
     }
 
     ptr= index(buffer, ':');
@@ -45,3 +54,24 @@ void parse_opt_servers(memcached_st *memc,
   }
 }
 
+void cleanup(void)
+{
+  unsigned int x;
+  for (x= 0; x < cleanup_list_length; x++)
+    free(cleanup_list[x]);
+
+  free(cleanup_list);
+}
+
+char *strdup_cleanup(const char *str)
+{
+  char *ptr;
+
+  ptr= strdup(str);
+
+  cleanup_list= (char **)realloc(cleanup_list, sizeof(char *) * (cleanup_list_length+1));
+  cleanup_list[cleanup_list_length]= ptr;
+  cleanup_list_length++;
+
+  return ptr;
+}