Line data Source code
1 : /* 2 : * strv-based utilities 3 : * 4 : * Copyright Martin Schwenke <martin@meltin.net> 2016 5 : * 6 : * This program is free software; you can redistribute it and/or modify 7 : * it under the terms of the GNU General Public License as published by 8 : * the Free Software Foundation; either version 3 of the License, or 9 : * (at your option) any later version. 10 : * 11 : * This program is distributed in the hope that it will be useful, 12 : * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 : * GNU General Public License for more details. 15 : * 16 : * You should have received a copy of the GNU General Public License 17 : * along with this program. If not, see <http://www.gnu.org/licenses/>. 18 : */ 19 : 20 : #include "replace.h" 21 : 22 : #include <string.h> 23 : #include <talloc.h> 24 : 25 : #include "strv.h" 26 : 27 : #include "strv_util.h" 28 : 29 8 : int strv_split(TALLOC_CTX *mem_ctx, char **strv, 30 : const char *src, const char *sep) 31 : { 32 8 : const char *s; 33 : 34 8 : if (src == NULL) { 35 0 : return 0; 36 : } 37 : 38 0 : s = src; 39 18 : while (*s != '\0') { 40 11 : size_t len; 41 : 42 : /* Skip separators */ 43 11 : len = strspn(s, sep); 44 11 : if (len != 0) { 45 10 : s += len; 46 : } 47 : 48 : /* Find non-separator substring */ 49 11 : len = strcspn(s, sep); 50 11 : if (len != 0) { 51 8 : int ret = strv_addn(mem_ctx, strv, s, len); 52 8 : if (ret != 0) { 53 0 : TALLOC_FREE(*strv); 54 0 : return ret; 55 : } 56 8 : s += len; 57 : } 58 : } 59 : 60 0 : return 0; 61 : }