From: Zbigniew Jędrzejewski-Szmek Date: Thu, 23 Feb 2017 08:16:44 +0000 (-0500) Subject: Rip out setting of the log level from udev_new and put it in a new function X-Git-Tag: chiark/234.4-1+devuan1.1+iwj1~181 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=commitdiff_plain;h=1595204336031d6f2b5e77ce50d87bf0d8281da6 Rip out setting of the log level from udev_new and put it in a new function This function is internal to elogind code, so external users of libudev will not see those log messages. I think this is better. If we want to allow that, the function could be put in libudev and exported. v2: check that the string is more than one char before stripping quotes --- diff --git a/Makefile.am b/Makefile.am index f5bfd2642..f41296b13 100644 --- a/Makefile.am +++ b/Makefile.am @@ -456,6 +456,8 @@ noinst_LTLIBRARIES += \ libshared.la libshared_la_SOURCES = \ + src/shared/udev-util.h \ + src/shared/udev-util.c \ src/shared/bus-util.c \ src/shared/bus-util.h \ src/shared/clean-ipc.c \ diff --git a/src/shared/udev-util.c b/src/shared/udev-util.c new file mode 100644 index 000000000..f708dcfa1 --- /dev/null +++ b/src/shared/udev-util.c @@ -0,0 +1,56 @@ +/*** + This file is part of systemd. + + Copyright 2017 Zbigniew Jędrzejewski-Szmek + + systemd is free software; you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with systemd; If not, see . +***/ + +#include + +#include "fileio.h" +#include "log.h" +#include "string-util.h" +#include "udev-util.h" + +int udev_parse_config(void) { + _cleanup_free_ char *val = NULL; + const char *log; + size_t n; + int r; + + r = parse_env_file("/etc/udev/udev.conf", NEWLINE, "udev_log", &val, NULL); + if (r == -ENOENT || !val) + return 0; + if (r < 0) + return r; + + /* unquote */ + n = strlen(val); + if (n >= 2 && + ((val[0] == '"' && val[n-1] == '"') || + (val[0] == '\'' && val[n-1] == '\''))) { + val[n - 1] = '\0'; + log = val + 1; + } else + log = val; + + /* we set the udev log level here explicitly, this is supposed + * to regulate the code in libudev/ and udev/. */ + r = log_set_max_level_from_string_realm(LOG_REALM_UDEV, log); + if (r < 0) + log_debug_errno(r, "/etc/udev/udev.conf: failed to set udev log level '%s', ignoring: %m", log); + + return 0; +} diff --git a/src/shared/udev-util.h b/src/shared/udev-util.h index d76ff5286..bbbdd7b95 100644 --- a/src/shared/udev-util.h +++ b/src/shared/udev-util.h @@ -50,3 +50,5 @@ DEFINE_TRIVIAL_CLEANUP_FUNC(struct udev_monitor*, udev_monitor_unref); #endif // 0 #define _cleanup_udev_monitor_unref_ _cleanup_(udev_monitor_unrefp) #define _cleanup_udev_list_cleanup_ _cleanup_(udev_list_cleanup) + +int udev_parse_config(void);