summaryrefslogtreecommitdiffstats
path: root/libidu/walker.c
diff options
context:
space:
mode:
Diffstat (limited to 'libidu/walker.c')
-rw-r--r--libidu/walker.c23
1 files changed, 15 insertions, 8 deletions
diff --git a/libidu/walker.c b/libidu/walker.c
index 9a7372e..6584179 100644
--- a/libidu/walker.c
+++ b/libidu/walker.c
@@ -498,10 +498,10 @@ append_strings_to_vector (char **vector_0, char *string, char const *delimiter_c
else
vector = vector_0 = MALLOC (char *, 2 + strlen (string) / 2);
- *vector = strtok (string, delimiter_class);
- while (*vector)
- *++vector = strtok (0, delimiter_class);
- return REALLOC (vector_0, char *, ++vector - vector_0);
+ do
+ *vector = strsep (&string, delimiter_class);
+ while (*vector++);
+ return REALLOC (vector_0, char *, vector - vector_0);
}
int
@@ -673,10 +673,17 @@ vectorize_string (char *string, char const *delimiter_class)
char **vector_0 = MALLOC (char *, 2 + strlen (string) / 2);
char **vector = vector_0;
- *vector = strtok (string, delimiter_class);
- while (*vector)
- *++vector = strtok (0, delimiter_class);
- return REALLOC (vector_0, char *, ++vector - vector_0);
+ *vector++ = strsep (&string, delimiter_class);
+ if (vector[-1])
+ {
+ /* Toss first field if empty */
+ if (vector[-1][0] == '\0')
+ vector--;
+ do
+ *vector = strsep (&string, delimiter_class);
+ while (*vector++);
+ }
+ return REALLOC (vector_0, char *, vector - vector_0);
}
void