/* string-util.c - Extra or enhanced routines for null terminated strings. * * Copyright (c) 2012 Jani Nikula * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see http://www.gnu.org/licenses/ . * * Author: Jani Nikula */ #include "string-util.h" #include "talloc.h" char * strtok_len (char *s, const char *delim, size_t *len) { /* skip initial delims */ s += strspn (s, delim); /* length of token */ *len = strcspn (s, delim); return *len ? s : NULL; } char * strtok_len2 (char *s, const char *delim, size_t *len, size_t *delim_len) { /* length of token */ *len = strcspn (s, delim); /* length of following delimiter */ *delim_len = strspn (s + *len, delim); return *len || *delim_len ? s : NULL; } int double_quote_str (void *ctx, const char *str, char **buf, size_t *len) { const char *in; char *out; size_t needed = 3; for (in = str; *in; in++) needed += (*in == '"') ? 2 : 1; if ((*buf == NULL) || (needed > *len)) { *len = 2 * needed; *buf = talloc_realloc (ctx, *buf, char, *len); } if (! *buf) return 1; out = *buf; *out++ = '"'; in = str; while (*in) { if (*in == '"') *out++ = '"'; *out++ = *in++; } *out++ = '"'; *out = '\0'; return 0; }