debug: factor out a function that opens and closes the new and old logfile
[samba.git] / lib / util / strv_util.c
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 int strv_split(TALLOC_CTX *mem_ctx, char **strv,
30                const char *src, const char *sep)
31 {
32         const char *s;
33
34         if (src == NULL) {
35                 return 0;
36         }
37
38         s = src;
39         while (*s != '\0') {
40                 size_t len;
41
42                 /* Skip separators */
43                 len = strspn(s, sep);
44                 if (len != 0) {
45                         s += len;
46                 }
47
48                 /* Find non-separator substring */
49                 len = strcspn(s, sep);
50                 if (len != 0) {
51                         int ret = strv_addn(mem_ctx, strv, s, len);
52                         if (ret != 0) {
53                                 TALLOC_FREE(*strv);
54                                 return ret;
55                         }
56                         s += len;
57                 }
58         }
59
60         return 0;
61 }