2 * Copyright (c) 2022 Omar Polo <op@openbsd.org>
4 * Permission to use, copy, modify, and distribute this software for any
5 * purpose with or without fee is hereby granted, provided that the above
6 * copyright notice and this permission notice appear in all copies.
8 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
9 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
10 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
11 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
12 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
13 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
14 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
24 /* everything but a-zA-Z */
25 #define WDELIMS " \t\n!\"#$%&'()*+,-./0123456789:;<=>?@[\\]^_`{|}~"
29 tokenize(const char *s)
31 char *d, *dup, *t, **tok = NULL;
33 size_t cap = 0, len = 0, newcap;
35 if ((dup = strdup(s)) == NULL)
42 while ((t = strsep(&d, WDELIMS)) != NULL) {
46 /* keep the space for a NULL terminator */
51 newtok = recallocarray(tok, cap, newcap,
59 if ((tok[len++] = strdup(t)) == NULL)
65 return calloc(1, sizeof(char *));
82 for (i = tok; *i != NULL; ++i)