summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2010-11-14 19:58:33 +0100
committerLennart Poettering <lennart@poettering.net>2010-11-14 19:59:10 +0100
commitf90cf44c02ac09469279126e2863a1e71358ee11 (patch)
tree088d05e846f60a9bbe0e3e60bb694bcff1cf2dcb
parent5475ff4b7ad8b95d9863c98f0930a6c9b5c80eed (diff)
load-fragment: properly do comparison of words
-rw-r--r--.gitignore1
-rw-r--r--Makefile.am12
-rw-r--r--src/load-fragment.c10
-rw-r--r--src/test-strv.c41
4 files changed, 58 insertions, 6 deletions
diff --git a/.gitignore b/.gitignore
index 21dd39456e..d5c667ab17 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,4 @@
+test-strv
systemd-ac-power
systemd-timestamp
systemd-cryptsetup
diff --git a/Makefile.am b/Makefile.am
index 8c92256d7f..e008cc78d8 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -137,7 +137,8 @@ noinst_PROGRAMS = \
test-hostname \
test-daemon \
test-cgroup \
- test-env-replace
+ test-env-replace \
+ test-strv
if HAVE_PAM
pamlib_LTLIBRARIES = \
@@ -619,6 +620,15 @@ test_env_replace_CFLAGS = \
test_env_replace_LDADD = \
libsystemd-basic.la
+test_strv_SOURCES = \
+ src/test-strv.c
+
+test_strv_CFLAGS = \
+ $(AM_CFLAGS)
+
+test_strv_LDADD = \
+ libsystemd-basic.la
+
systemd_logger_SOURCES = \
src/logger.c \
src/sd-daemon.c \
diff --git a/src/load-fragment.c b/src/load-fragment.c
index 424e6c37bb..9b39d9161a 100644
--- a/src/load-fragment.c
+++ b/src/load-fragment.c
@@ -433,7 +433,7 @@ static int config_parse_exec(
k = 0;
FOREACH_WORD_QUOTED(w, l, rvalue, state) {
- if (strncmp(w, ";", l) == 0)
+ if (strncmp(w, ";", MAX(l, 1U)) == 0)
break;
k++;
@@ -444,7 +444,7 @@ static int config_parse_exec(
k = 0;
FOREACH_WORD_QUOTED(w, l, rvalue, state) {
- if (strncmp(w, ";", l) == 0)
+ if (strncmp(w, ";", MAX(l, 1U)) == 0)
break;
if (honour_argv0 && w == rvalue) {
@@ -1077,11 +1077,11 @@ static int config_parse_mount_flags(
assert(data);
FOREACH_WORD_QUOTED(w, l, rvalue, state) {
- if (strncmp(w, "shared", l) == 0)
+ if (strncmp(w, "shared", MAX(l, 6U)) == 0)
flags |= MS_SHARED;
- else if (strncmp(w, "slave", l) == 0)
+ else if (strncmp(w, "slave", MAX(l, 5U)) == 0)
flags |= MS_SLAVE;
- else if (strncmp(w, "private", l) == 0)
+ else if (strncmp(w, "private", MAX(l, 7U)) == 0)
flags |= MS_PRIVATE;
else {
log_error("[%s:%u] Failed to parse mount flags, ignoring: %s", filename, line, rvalue);
diff --git a/src/test-strv.c b/src/test-strv.c
new file mode 100644
index 0000000000..573436896b
--- /dev/null
+++ b/src/test-strv.c
@@ -0,0 +1,41 @@
+/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
+
+/***
+ This file is part of systemd.
+
+ Copyright 2010 Lennart Poettering
+
+ systemd 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 2 of the License, or
+ (at your option) any later version.
+
+ systemd 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 systemd; If not, see <http://www.gnu.org/licenses/>.
+***/
+
+#include <string.h>
+#include "util.h"
+
+int main(int argc, char *argv[]) {
+ char *w, *state;
+ size_t l;
+ const char test[] = "test a b c 'd' e '' '' hhh '' ''";
+
+ printf("<%s>\n", test);
+
+ FOREACH_WORD_QUOTED(w, l, test, state) {
+ char *t;
+
+ assert_se(t = strndup(w, l));
+ printf("<%s>\n", t);
+ free(t);
+ }
+
+ return 0;
+}