load-fragment: properly do comparison of words

This commit is contained in:
Lennart Poettering 2010-11-14 19:58:33 +01:00
parent 5475ff4b7a
commit f90cf44c02
4 changed files with 58 additions and 6 deletions

1
.gitignore vendored
View File

@ -1,3 +1,4 @@
test-strv
systemd-ac-power
systemd-timestamp
systemd-cryptsetup

View File

@ -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 \

View File

@ -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);

41
src/test-strv.c Normal file
View File

@ -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;
}