diff options
author | Peter Hutterer <peter.hutterer@who-t.net> | 2010-02-10 15:36:49 +1000 |
---|---|---|
committer | Peter Hutterer <peter.hutterer@who-t.net> | 2010-02-11 19:25:39 +1000 |
commit | 3ac43df5d4a25d6e0058b327fa05a1c1436b4794 (patch) | |
tree | 0c691ad68eb1bf4a87e2dd66e373ccbe78f6c31d /hw/xfree86/parser | |
parent | 27d1b86d1b858f931b4cb1b6ddf857c76d92a6d9 (diff) |
Add xstrtokenize to the dix.
Move tokenize out of the parser, make it a dix util function instead.
Splitting a string into multiple substrings is useful by other places, so
let's use it across the line. Future users include config/hal, config/udev
and of course the parser.
Example usage:
char **substrings = xstrtokenize(my_string, "\n");
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Dan Nicholson <dbn.lists@gmail.com>
Diffstat (limited to 'hw/xfree86/parser')
-rw-r--r-- | hw/xfree86/parser/InputClass.c | 44 |
1 files changed, 3 insertions, 41 deletions
diff --git a/hw/xfree86/parser/InputClass.c b/hw/xfree86/parser/InputClass.c index 8041740a8..9fabb22cd 100644 --- a/hw/xfree86/parser/InputClass.c +++ b/hw/xfree86/parser/InputClass.c @@ -60,44 +60,6 @@ xf86ConfigSymTabRec InputClassTab[] = #define TOKEN_SEP "|" -/* - * Tokenize a string into a NULL terminated array of strings. Always returns - * an allocated array unless an error occurs. - */ -static char ** -tokenize(const char *str) -{ - char **list, **nlist; - char *tok, *tmp; - unsigned num = 0, n; - - list = calloc(1, sizeof(*list)); - if (!list) - return NULL; - tmp = strdup(str); - if (!tmp) - goto error; - for (tok = strtok(tmp, TOKEN_SEP); tok; tok = strtok(NULL, TOKEN_SEP)) { - nlist = realloc(list, (num + 2) * sizeof(*list)); - if (!nlist) - goto error; - list = nlist; - list[num] = strdup(tok); - if (!list[num]) - goto error; - list[++num] = NULL; - } - free(tmp); - return list; - -error: - TestFree(tmp); - for (n = 0; n < num; n++) - free(list[n]); - TestFree(list); - return NULL; -} - XF86ConfInputClassPtr xf86parseInputClassSection(void) { @@ -133,17 +95,17 @@ xf86parseInputClassSection(void) case MATCH_PRODUCT: if (xf86getSubToken(&(ptr->comment)) != STRING) Error(QUOTE_MSG, "MatchProduct"); - ptr->match_product = tokenize(val.str); + ptr->match_product = xstrtokenize(val.str, TOKEN_SEP); break; case MATCH_VENDOR: if (xf86getSubToken(&(ptr->comment)) != STRING) Error(QUOTE_MSG, "MatchVendor"); - ptr->match_vendor = tokenize(val.str); + ptr->match_vendor = xstrtokenize(val.str, TOKEN_SEP); break; case MATCH_DEVICE_PATH: if (xf86getSubToken(&(ptr->comment)) != STRING) Error(QUOTE_MSG, "MatchDevicePath"); - ptr->match_device = tokenize(val.str); + ptr->match_device = xstrtokenize(val.str, TOKEN_SEP); break; case MATCH_IS_KEYBOARD: if (xf86getSubToken(&(ptr->comment)) != STRING) |