Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Make sure all the source files have an reference of the copyright and of the licence
[simgrid.git] / src / xbt / xbt_str.c
index 6167b1f..16a45ce 100644 (file)
@@ -1,3 +1,4 @@
+/* $Id$ */
 
 /* xbt_str.c - various helping functions to deal with strings               */
 
 #include "portable.h"
 #include "xbt/matrix.h" /* for the diff */
 
-static void free_string(void *d){
-  free(*(void**)d);
-}
-
 /**  @brief Strip whitespace (or other characters) from the end of a string.
  *
  * Strips the whitespaces from the end of s. 
@@ -191,7 +188,7 @@ xbt_str_strip_spaces(char *s) {
  */
 
 xbt_dynar_t xbt_str_split(const char *s, const char *sep) {
-  xbt_dynar_t res = xbt_dynar_new(sizeof(char*), free_string);
+  xbt_dynar_t res = xbt_dynar_new(sizeof(char*), xbt_free_ref);
   const char *p, *q;
   int done;
   const char* sep_dflt = " \t\n\r\x0B";
@@ -235,11 +232,11 @@ xbt_dynar_t xbt_str_split(const char *s, const char *sep) {
 
 /**
  * \brief This functions splits a string after using another string as separator
- * For example A##B##C splitted after ## will return the dynar {A,B,C}
+ * For example A!!B!!C splitted after !! will return the dynar {A,B,C}
  * \return An array of dynars containing the string tokens
 */
 xbt_dynar_t xbt_str_split_str(const char *s, const char *sep) {
-  xbt_dynar_t res = xbt_dynar_new(sizeof(char*), free_string);
+  xbt_dynar_t res = xbt_dynar_new(sizeof(char*), xbt_free_ref);
   int done;
   const char *p, *q;
  
@@ -249,6 +246,7 @@ xbt_dynar_t xbt_str_split_str(const char *s, const char *sep) {
   if (s[0] == '\0') 
     return res;
   if (sep[0] == '\0') {
+    s = xbt_strdup(s);
     xbt_dynar_push(res, &s);
     return res;
   }
@@ -290,7 +288,7 @@ xbt_dynar_t xbt_str_split_str(const char *s, const char *sep) {
  */
 
 xbt_dynar_t xbt_str_split_quoted(const char *s) {
-  xbt_dynar_t res = xbt_dynar_new(sizeof(char*), free_string);
+  xbt_dynar_t res = xbt_dynar_new(sizeof(char*), xbt_free_ref);
   char *str; /* we have to copy the string before, to handle backslashes */
   char *beg, *end; /* pointers around the parsed chunk */
   int in_simple_quote=0, in_double_quote=0;
@@ -382,6 +380,8 @@ xbt_dynar_t xbt_str_split_quoted(const char *s) {
 }
 
 #ifdef SIMGRID_TEST
+#include "xbt/str.h"
+
 #define mytest(name, input, expected) \
   xbt_test_add0(name); \
   d=xbt_str_split_quoted(input); \
@@ -454,7 +454,7 @@ char *xbt_str_join(xbt_dynar_t dyn, const char*sep) {
   res = xbt_malloc(len);
   p=res;
   xbt_dynar_foreach(dyn,cpt,cursor) {
-    if (cpt<dyn_len-1)
+    if ((int)cpt<dyn_len-1)
       p+=sprintf(p,"%s%s",cursor,sep);    
     else
       p+=sprintf(p,"%s",cursor);    
@@ -609,7 +609,7 @@ char *xbt_str_diff(char *a, char *b) {
   xbt_dynar_t db = xbt_str_split(b, "\n");
 
   xbt_matrix_t C = diff_build_LCS(da,db);
-  xbt_dynar_t diff = xbt_dynar_new(sizeof(char*),free_string);
+  xbt_dynar_t diff = xbt_dynar_new(sizeof(char*),xbt_free_ref);
   char *res=NULL;
   
   diff_build_diff(diff, C, da,db, xbt_dynar_length(da)-1, xbt_dynar_length(db)-1);