diff options
author | David Oberhollenzer <david.oberhollenzer@tele2.at> | 2018-09-16 01:12:06 +0200 |
---|---|---|
committer | David Oberhollenzer <david.oberhollenzer@tele2.at> | 2018-09-16 01:12:06 +0200 |
commit | 481744a2ba4d9b795918d3bc0767321e05e10bbd (patch) | |
tree | 8b83d43aff0e35f565fca981d324ef2cff203e8d | |
parent | 5b78d4d695cf0f0eb09e2ee3c96be31250611534 (diff) |
Move splitkv function to libcfg
Signed-off-by: David Oberhollenzer <david.oberhollenzer@tele2.at>
-rw-r--r-- | lib/Makemodule.am | 1 | ||||
-rw-r--r-- | lib/include/libcfg.h | 9 | ||||
-rw-r--r-- | lib/libcfg/splitkv.c | 48 | ||||
-rw-r--r-- | lib/util/rdsvc.c | 27 |
4 files changed, 58 insertions, 27 deletions
diff --git a/lib/Makemodule.am b/lib/Makemodule.am index 8a5ee8e..817a2a5 100644 --- a/lib/Makemodule.am +++ b/lib/Makemodule.am @@ -9,6 +9,7 @@ libinit_a_CPPFLAGS = $(AM_CPPFLAGS) libinit_a_CFLAGS = $(AM_CFLAGS) libcfg_a_SOURCES = lib/libcfg/rdline.c lib/libcfg/unescape.c +libcfg_a_SOURCES += lib/libcfg/splitkv.c libcfg_a_SOURCES += lib/libcfg/pack_argv.c lib/include/libcfg.h libcfg_a_CPPFLAGS = $(AM_CPPFLAGS) libcfg_a_CFLAGS = $(AM_CFLAGS) diff --git a/lib/include/libcfg.h b/lib/include/libcfg.h index 5724bdc..83b9213 100644 --- a/lib/include/libcfg.h +++ b/lib/include/libcfg.h @@ -95,4 +95,13 @@ int unescape(char *src); */ int pack_argv(char *str); +/* + Split the current input line into a space seperted keyword + (alphabetical characters only) and a value (the rest of the line). + + If errors are encounted, prints a diagnostic message to stderr and + returns -1. On success, zero is returned. + */ +int splitkv(rdline_t *rd, char **k, char **v); + #endif /* LIBCONFIG_H */ diff --git a/lib/libcfg/splitkv.c b/lib/libcfg/splitkv.c new file mode 100644 index 0000000..49f8ebe --- /dev/null +++ b/lib/libcfg/splitkv.c @@ -0,0 +1,48 @@ +/* SPDX-License-Identifier: GPL-3.0-or-later */ +/* + * Copyright (C) 2018 - David Oberhollenzer + * + * 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 <https://www.gnu.org/licenses/>. + */ +#include <ctype.h> +#include <stdio.h> + +#include "libcfg.h" + +int splitkv(rdline_t *rd, char **k, char **v) +{ + char *key = rd->buffer, *value = rd->buffer; + + while (*value != ' ' && *value != '\0') { + if (!isalpha(*value)) { + fprintf(stderr, + "%s: %zu: unexpected '%c' in keyword\n", + rd->filename, rd->lineno, *value); + return -1; + } + ++value; + } + + if (*value != ' ') { + fprintf(stderr, "%s: %zu: expected argument after '%s'\n", + rd->filename, rd->lineno, key); + return -1; + } + + *(value++) = '\0'; + + *k = key; + *v = value; + return 0; +} diff --git a/lib/util/rdsvc.c b/lib/util/rdsvc.c index 37c7ba0..3e146a2 100644 --- a/lib/util/rdsvc.c +++ b/lib/util/rdsvc.c @@ -226,33 +226,6 @@ static const struct svc_param { { "after", 0, RDSVC_NO_DEPS, svc_after }, }; -static int splitkv(rdline_t *rd, char **k, char **v) -{ - char *key = rd->buffer, *value = rd->buffer; - - while (*value != ' ' && *value != '\0') { - if (!isalpha(*value)) { - fprintf(stderr, - "%s: %zu: unexpected '%c' in keyword\n", - rd->filename, rd->lineno, *value); - return -1; - } - ++value; - } - - if (*value != ' ') { - fprintf(stderr, "%s: %zu: expected argument after '%s'\n", - rd->filename, rd->lineno, key); - return -1; - } - - *(value++) = '\0'; - - *k = key; - *v = value; - return 0; -} - static const struct svc_param *find_param(rdline_t *rd, const char *name) { size_t i; |