summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
b2991a6)
git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk@3503
48e7efb5-ca39-0410-a469-
dd3cf9ba447f
XBT_PUBLIC(void) xbt_str_ltrim( char* s, const char* char_list);
XBT_PUBLIC(void) xbt_str_trim(char* s, const char* char_list);
XBT_PUBLIC(void) xbt_str_ltrim( char* s, const char* char_list);
XBT_PUBLIC(void) xbt_str_trim(char* s, const char* char_list);
-XBT_PUBLIC(xbt_dynar_t) xbt_str_split(char *s, const char *sep);
+XBT_PUBLIC(xbt_dynar_t) xbt_str_split(const char *s, const char *sep);
XBT_PUBLIC(char *) xbt_str_join(xbt_dynar_t dynar, const char *sep);
/* */
XBT_PUBLIC(char *) xbt_str_join(xbt_dynar_t dynar, const char *sep);
/* */
* - "\x0B" (ASCII 11 (0x0B)) vertical tab.
*/
* - "\x0B" (ASCII 11 (0x0B)) vertical tab.
*/
-xbt_dynar_t xbt_str_split(char *s, const char *sep) {
- char *str=xbt_strdup(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*), free_string);
int done;
const char* sep_dflt = " \t\n\r\x0B";
char is_sep[256] = {1,0};
int done;
const char* sep_dflt = " \t\n\r\x0B";
char is_sep[256] = {1,0};
is_sep[0] = 1; /* End of string is also separator */
/* Do the job */
is_sep[0] = 1; /* End of string is also separator */
/* Do the job */
+
+ if (s[0] == '\0')
+ return res;
+
while (!done) {
char *topush;
while (!is_sep[(unsigned char)*q]) {
q++;
}
while (!done) {
char *topush;
while (!is_sep[(unsigned char)*q]) {
q++;
}
- if (*q == '\0') {
-#ifdef UNDEF
- if (p==q) {
- /* do not push last empty line */
- free(str);
- return res;
- }
-#endif
- } else {
- *q='\0';
- }
- topush=xbt_strdup(p);
+
+ topush=xbt_malloc(q-p+1);
+ memcpy(topush,p,q-p);
+ topush[q - p] = '\0';
xbt_dynar_push(res,&topush);
p = ++q;
}
xbt_dynar_push(res,&topush);
p = ++q;
}