Enlightenment CVS wrote:
> Enlightenment CVS committal
>
> Author  : pfritz
> Project : e17
> Module  : libs/ecore
>
> Dir     : e17/libs/ecore/src/lib/ecore
>
>
> Modified Files:
>       Ecore_Str.h ecore_str.c 
>
>
> Log Message:
> add ecore_str_split(), thanks to rookmoot
>
> ===================================================================
> RCS file: /cvs/e/e17/libs/ecore/src/lib/ecore/Ecore_Str.h,v
> retrieving revision 1.4
> retrieving revision 1.5
> diff -u -3 -r1.4 -r1.5
> --- Ecore_Str.h       17 Feb 2007 06:25:53 -0000      1.4
> +++ Ecore_Str.h       13 Mar 2007 01:17:33 -0000      1.5
> @@ -46,7 +46,9 @@
>  EAPI int ecore_str_has_prefix(const char *str, const char *prefix);
>  
>  EAPI int ecore_str_has_suffix(const char *str, const char *suffix);
> -
> +EAPI char **ecore_str_split(const char *string, const char *delimiter, 
> +                            int max_tokens);
> +EAPI void ecore_str_vector_free(char **str_array);
>  
>  #ifdef __cplusplus
>  }
> ===================================================================
> RCS file: /cvs/e/e17/libs/ecore/src/lib/ecore/ecore_str.c,v
> retrieving revision 1.5
> retrieving revision 1.6
> diff -u -3 -r1.5 -r1.6
> --- ecore_str.c       17 Feb 2007 06:25:53 -0000      1.5
> +++ ecore_str.c       13 Mar 2007 01:17:33 -0000      1.6
> @@ -20,7 +20,8 @@
>  #include <sys/types.h>
>  #include <string.h>
>  
> -# include "ecore_private.h"
> +#include "ecore_private.h"
> +#include "Ecore_Data.h"
>  
>  /*
>   * Copy src to string dst of size siz.  At most siz-1 characters
> @@ -129,3 +130,95 @@
>  
>     return (strncmp(str + str_len - suffix_len, suffix, suffix_len) == 0);
>  }
> +
> +/**
> + * Splits a string into a maximum of max_tokens pieces, using the given
> + * delimiter. If max_tokens is reached, the final string in the returned
> + * string array contains the remainder of string.
> + *
> + * @param string      A string to split.
> + * @param delimiter   A string which specifies the places at which to split 
> the 
> + *                    string. The delimiter is not included in any of the 
> + *                    resulting strings, unless max_tokens is reached.
> + * @param max_tokens  The maximum number of strings to split string into. 
> + *                    If this is less than 1, the string is split completely.
> + * @return            A newly-allocated NULL-terminated array of strings.
> + *                    Use ecore_str_vector_free() to free it.
> + */
> +char**
> +ecore_str_split(const char *string, const char *delimiter, int max_tokens)
> +{
> +   char **str_array = NULL;
> +   char *s;
> +   size_t n = 0;
> +   int max = max_tokens;
> +   const char *remainder;
> +   size_t delimiter_len;   
> +
> +   CHECK_PARAM_POINTER_RETURN("string", string, NULL);
> +   CHECK_PARAM_POINTER_RETURN("delimiter", delimiter, NULL);
> +  
> +  /* on the first run we just count the number of the strings we'll finally
> +   * have */ 
> +   remainder = string;
> +   s = strstr(remainder, delimiter);
> +   if (s)
> +   {
> +     delimiter_len = strlen(delimiter);   
> +     while (--max_tokens && s)
> +     {
> +       remainder = s + delimiter_len;
> +       s = strstr(remainder, delimiter);
> +       n++;
> +     }
> +   }
> +   if (*string != '\0') n++;
> +   
> +   str_array = malloc(sizeof(char *)*(n + 1));
> +   str_array[n] = NULL;
> +
> +   /* reset to the initial values */
> +   n = 0;
> +   max_tokens = max;
> +   remainder = string;
> +   s = strstr(remainder, delimiter);
> +   if (s)
> +   {
> +     while (--max_tokens && s)
> +     {
> +       size_t len;     
> +       char *new_string;
> +
> +       len = s - remainder;
> +       new_string = malloc(sizeof(char)*(len + 1));
> +       memcpy(new_string, remainder, len);
> +       new_string[len] = 0;
> +       str_array[n++] = new_string;
> +
> +       remainder = s + delimiter_len;
> +       s = strstr(remainder, delimiter);
> +     }
> +   }
> +   if (*string != '\0') str_array[n] = strdup(remainder);
> +
> +   return str_array;
> +}
> +
> +/**
> + * Free an array of strings and the array itself
> + *
> + * @param str_array An NULL-terminated array of strings to free.
> + */
> +void
> +ecore_str_vector_free(char **str_array)
> +{
> +   CHECK_PARAM_POINTER("str_array", str_array);
> +   int i;
> +
> +   for(i=0; str_array[i] != NULL; i++)
> +   {
> +     FREE(str_array[i]);
> +   }
> +   FREE(str_array);
> +}
> +
>
>
>
> -------------------------------------------------------------------------
> Take Surveys. Earn Cash. Influence the Future of IT
> Join SourceForge.net's Techsay panel and you'll get the chance to share your
> opinions on IT & business topics through brief surveys-and earn cash
> http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
> _______________________________________________
> enlightenment-cvs mailing list
> enlightenment-cvs@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs
>
>   
Thanks to use arrays instead of list. Thanks to commit it too :)

See you

-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys-and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
enlightenment-devel mailing list
enlightenment-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel

Reply via email to