1 /* string-util.c - Extra or enhanced routines for null terminated strings.
3 * Copyright (c) 2012 Jani Nikula
5 * This program is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation, either version 3 of the License, or
8 * (at your option) any later version.
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
15 * You should have received a copy of the GNU General Public License
16 * along with this program. If not, see http://www.gnu.org/licenses/ .
18 * Author: Jani Nikula <jani@nikula.org>
22 #include "string-util.h"
28 strtok_len (char *s, const char *delim, size_t *len)
30 /* skip initial delims */
31 s += strspn (s, delim);
34 *len = strcspn (s, delim);
36 return *len ? s : NULL;
40 is_unquoted_terminator (unsigned char c)
42 return c == 0 || c <= ' ' || c == ')';
46 make_boolean_term (void *ctx, const char *prefix, const char *term,
47 char **buf, size_t *len)
54 /* Do we need quoting? To be paranoid, we quote anything
55 * containing a quote, even though it only matters at the
56 * beginning, and anything containing non-ASCII text. */
57 for (in = term; *in && !need_quoting; in++)
58 if (is_unquoted_terminator (*in) || *in == '"'
59 || (unsigned char)*in > 127)
63 for (in = term; *in; in++)
64 needed += (*in == '"') ? 2 : 1;
66 needed = strlen (term) + 1;
68 /* Reserve space for the prefix */
70 needed += strlen (prefix) + 1;
72 if ((*buf == NULL) || (needed > *len)) {
74 *buf = talloc_realloc (ctx, *buf, char, *len);
84 /* Copy in the prefix */
87 out += strlen (prefix);
96 /* Quote term by enclosing it in double quotes and doubling any
97 * internal double quotes. */