udev: switch to systemd logging functions

This commit is contained in:
Kay Sievers 2014-11-13 13:11:04 +01:00
parent a974cacd9a
commit 25e773eeb4
18 changed files with 68 additions and 208 deletions

4
TODO
View File

@ -18,8 +18,6 @@ Bugfixes:
str_split_quoted() should return a real return code, so spawn_child can str_split_quoted() should return a real return code, so spawn_child can
report the failure properly. report the failure properly.
* udev_set_log_priority should verify the value before saving it.
External: External:
* Fedora: add an rpmlint check that verifies that all unit files in the RPM are listed in %systemd_post macros. * Fedora: add an rpmlint check that verifies that all unit files in the RPM are listed in %systemd_post macros.
@ -80,7 +78,7 @@ Features:
* maybe allow timer units with an empty Units= setting, so that they * maybe allow timer units with an empty Units= setting, so that they
can be used for resuming the system but nothing else. can be used for resuming the system but nothing else.
* what to do about udev db binary stability for apps? * what to do about udev db binary stability for apps? (raw access is not an option)
* maybe provide an API to allow migration of foreign PIDs into existing scopes. * maybe provide an API to allow migration of foreign PIDs into existing scopes.

View File

@ -129,17 +129,6 @@
</variablelist> </variablelist>
</refsect1> </refsect1>
<refsect1><title>Environment</title>
<variablelist class='environment-variables'>
<varlistentry>
<term><varname>$UDEV_LOG=</varname></term>
<listitem>
<para>Set the log level.</para>
</listitem>
</varlistentry>
</variablelist>
</refsect1>
<refsect1><title>Kernel command line</title> <refsect1><title>Kernel command line</title>
<variablelist class='kernel-commandline-options'> <variablelist class='kernel-commandline-options'>
<para>Parameters starting with "rd." will be read when <para>Parameters starting with "rd." will be read when

View File

@ -102,7 +102,6 @@ static bool device_has_info(struct udev_device *udev_device)
int udev_device_update_db(struct udev_device *udev_device) int udev_device_update_db(struct udev_device *udev_device)
{ {
struct udev *udev = udev_device_get_udev(udev_device);
bool has_info; bool has_info;
const char *id; const char *id;
char filename[UTIL_PATH_SIZE]; char filename[UTIL_PATH_SIZE];
@ -130,7 +129,7 @@ int udev_device_update_db(struct udev_device *udev_device)
mkdir_parents(filename_tmp, 0755); mkdir_parents(filename_tmp, 0755);
f = fopen(filename_tmp, "we"); f = fopen(filename_tmp, "we");
if (f == NULL) { if (f == NULL) {
udev_dbg(udev, "unable to create temporary db file '%s': %m\n", filename_tmp); log_debug("unable to create temporary db file '%s': %m\n", filename_tmp);
return -errno; return -errno;
} }
@ -172,7 +171,7 @@ int udev_device_update_db(struct udev_device *udev_device)
r = rename(filename_tmp, filename); r = rename(filename_tmp, filename);
if (r < 0) if (r < 0)
return -1; return -1;
udev_dbg(udev, "created %s file '%s' for '%s'\n", has_info ? "db" : "empty", log_debug("created %s file '%s' for '%s'\n", has_info ? "db" : "empty",
filename, udev_device_get_devpath(udev_device)); filename, udev_device_get_devpath(udev_device));
return 0; return 0;
} }

View File

@ -535,7 +535,7 @@ int udev_device_read_db(struct udev_device *udev_device, const char *dbfile)
f = fopen(dbfile, "re"); f = fopen(dbfile, "re");
if (f == NULL) { if (f == NULL) {
udev_dbg(udev_device->udev, "no db file to read %s: %m\n", dbfile); log_debug("no db file to read %s: %m\n", dbfile);
return -errno; return -errno;
} }
@ -577,7 +577,7 @@ int udev_device_read_db(struct udev_device *udev_device, const char *dbfile)
} }
fclose(f); fclose(f);
udev_dbg(udev_device->udev, "device %p filled with db file data\n", udev_device); log_debug("device %p filled with db file data\n", udev_device);
return 0; return 0;
} }
@ -704,7 +704,7 @@ _public_ struct udev_device *udev_device_new_from_syspath(struct udev *udev, con
/* path starts in sys */ /* path starts in sys */
if (!startswith(syspath, "/sys")) { if (!startswith(syspath, "/sys")) {
udev_dbg(udev, "not in sys :%s\n", syspath); log_debug("not in sys :%s\n", syspath);
errno = EINVAL; errno = EINVAL;
return NULL; return NULL;
} }
@ -739,7 +739,7 @@ _public_ struct udev_device *udev_device_new_from_syspath(struct udev *udev, con
return NULL; return NULL;
udev_device_set_syspath(udev_device, path); udev_device_set_syspath(udev_device, path);
udev_dbg(udev, "device %p has devpath '%s'\n", udev_device, udev_device_get_devpath(udev_device)); log_debug("device %p has devpath '%s'\n", udev_device, udev_device_get_devpath(udev_device));
return udev_device; return udev_device;
} }
@ -971,7 +971,7 @@ _public_ struct udev_device *udev_device_new_from_environment(struct udev *udev)
udev_device_add_property_from_string_parse(udev_device, environ[i]); udev_device_add_property_from_string_parse(udev_device, environ[i]);
if (udev_device_add_property_from_string_parse_finish(udev_device) < 0) { if (udev_device_add_property_from_string_parse_finish(udev_device) < 0) {
udev_dbg(udev, "missing values, invalid device\n"); log_debug("missing values, invalid device\n");
udev_device_unref(udev_device); udev_device_unref(udev_device);
udev_device = NULL; udev_device = NULL;
} }

View File

@ -289,45 +289,45 @@ _public_ struct udev_hwdb *udev_hwdb_new(struct udev *udev) {
else if (errno == ENOENT) else if (errno == ENOENT)
continue; continue;
else { else {
udev_dbg(udev, "error reading %s: %m", hwdb_bin_path); log_debug("error reading %s: %m", hwdb_bin_path);
udev_hwdb_unref(hwdb); udev_hwdb_unref(hwdb);
return NULL; return NULL;
} }
} }
if (!hwdb->f) { if (!hwdb->f) {
udev_dbg(udev, "hwdb.bin does not exist, please run udevadm hwdb --update"); log_debug("hwdb.bin does not exist, please run udevadm hwdb --update");
udev_hwdb_unref(hwdb); udev_hwdb_unref(hwdb);
return NULL; return NULL;
} }
if (fstat(fileno(hwdb->f), &hwdb->st) < 0 || if (fstat(fileno(hwdb->f), &hwdb->st) < 0 ||
(size_t)hwdb->st.st_size < offsetof(struct trie_header_f, strings_len) + 8) { (size_t)hwdb->st.st_size < offsetof(struct trie_header_f, strings_len) + 8) {
udev_dbg(udev, "error reading %s: %m", hwdb_bin_path); log_debug("error reading %s: %m", hwdb_bin_path);
udev_hwdb_unref(hwdb); udev_hwdb_unref(hwdb);
return NULL; return NULL;
} }
hwdb->map = mmap(0, hwdb->st.st_size, PROT_READ, MAP_SHARED, fileno(hwdb->f), 0); hwdb->map = mmap(0, hwdb->st.st_size, PROT_READ, MAP_SHARED, fileno(hwdb->f), 0);
if (hwdb->map == MAP_FAILED) { if (hwdb->map == MAP_FAILED) {
udev_dbg(udev, "error mapping %s: %m", hwdb_bin_path); log_debug("error mapping %s: %m", hwdb_bin_path);
udev_hwdb_unref(hwdb); udev_hwdb_unref(hwdb);
return NULL; return NULL;
} }
if (memcmp(hwdb->map, sig, sizeof(hwdb->head->signature)) != 0 || if (memcmp(hwdb->map, sig, sizeof(hwdb->head->signature)) != 0 ||
(size_t)hwdb->st.st_size != le64toh(hwdb->head->file_size)) { (size_t)hwdb->st.st_size != le64toh(hwdb->head->file_size)) {
udev_dbg(udev, "error recognizing the format of %s", hwdb_bin_path); log_debug("error recognizing the format of %s", hwdb_bin_path);
udev_hwdb_unref(hwdb); udev_hwdb_unref(hwdb);
return NULL; return NULL;
} }
udev_dbg(udev, "=== trie on-disk ===\n"); log_debug("=== trie on-disk ===\n");
udev_dbg(udev, "tool version: %"PRIu64, le64toh(hwdb->head->tool_version)); log_debug("tool version: %"PRIu64, le64toh(hwdb->head->tool_version));
udev_dbg(udev, "file size: %8"PRIu64" bytes\n", hwdb->st.st_size); log_debug("file size: %8"PRIu64" bytes\n", hwdb->st.st_size);
udev_dbg(udev, "header size %8"PRIu64" bytes\n", le64toh(hwdb->head->header_size)); log_debug("header size %8"PRIu64" bytes\n", le64toh(hwdb->head->header_size));
udev_dbg(udev, "strings %8"PRIu64" bytes\n", le64toh(hwdb->head->strings_len)); log_debug("strings %8"PRIu64" bytes\n", le64toh(hwdb->head->strings_len));
udev_dbg(udev, "nodes %8"PRIu64" bytes\n", le64toh(hwdb->head->nodes_len)); log_debug("nodes %8"PRIu64" bytes\n", le64toh(hwdb->head->nodes_len));
return hwdb; return hwdb;
} }

View File

@ -121,7 +121,7 @@ static bool udev_has_devtmpfs(struct udev *udev) {
r = name_to_handle_at(AT_FDCWD, "/dev", &h.handle, &mount_id, 0); r = name_to_handle_at(AT_FDCWD, "/dev", &h.handle, &mount_id, 0);
if (r < 0) { if (r < 0) {
if (errno != EOPNOTSUPP) if (errno != EOPNOTSUPP)
udev_dbg(udev, "name_to_handle_at on /dev: %m\n"); log_debug("name_to_handle_at on /dev: %m\n");
return false; return false;
} }
@ -174,7 +174,7 @@ struct udev_monitor *udev_monitor_new_from_netlink_fd(struct udev *udev, const c
* will not receive any messages. * will not receive any messages.
*/ */
if (access("/run/udev/control", F_OK) < 0 && !udev_has_devtmpfs(udev)) { if (access("/run/udev/control", F_OK) < 0 && !udev_has_devtmpfs(udev)) {
udev_dbg(udev, "the udev service seems not to be active, disable the monitor\n"); log_debug("the udev service seems not to be active, disable the monitor\n");
group = UDEV_MONITOR_NONE; group = UDEV_MONITOR_NONE;
} else } else
group = UDEV_MONITOR_UDEV; group = UDEV_MONITOR_UDEV;
@ -190,7 +190,7 @@ struct udev_monitor *udev_monitor_new_from_netlink_fd(struct udev *udev, const c
if (fd < 0) { if (fd < 0) {
udev_monitor->sock = socket(PF_NETLINK, SOCK_RAW|SOCK_CLOEXEC|SOCK_NONBLOCK, NETLINK_KOBJECT_UEVENT); udev_monitor->sock = socket(PF_NETLINK, SOCK_RAW|SOCK_CLOEXEC|SOCK_NONBLOCK, NETLINK_KOBJECT_UEVENT);
if (udev_monitor->sock == -1) { if (udev_monitor->sock == -1) {
udev_dbg(udev, "error getting socket: %m\n"); log_debug("error getting socket: %m\n");
free(udev_monitor); free(udev_monitor);
return NULL; return NULL;
} }
@ -407,14 +407,14 @@ _public_ int udev_monitor_enable_receiving(struct udev_monitor *udev_monitor)
if (err == 0) if (err == 0)
udev_monitor->snl.nl.nl_pid = snl.nl.nl_pid; udev_monitor->snl.nl.nl_pid = snl.nl.nl_pid;
} else { } else {
udev_dbg(udev_monitor->udev, "bind failed: %m\n"); log_debug("bind failed: %m\n");
return -errno; return -errno;
} }
/* enable receiving of sender credentials */ /* enable receiving of sender credentials */
err = setsockopt(udev_monitor->sock, SOL_SOCKET, SO_PASSCRED, &on, sizeof(on)); err = setsockopt(udev_monitor->sock, SOL_SOCKET, SO_PASSCRED, &on, sizeof(on));
if (err < 0) if (err < 0)
udev_dbg(udev_monitor->udev, "setting SO_PASSCRED failed: %m\n"); log_debug("setting SO_PASSCRED failed: %m\n");
return 0; return 0;
} }
@ -602,12 +602,12 @@ retry:
buflen = recvmsg(udev_monitor->sock, &smsg, 0); buflen = recvmsg(udev_monitor->sock, &smsg, 0);
if (buflen < 0) { if (buflen < 0) {
if (errno != EINTR) if (errno != EINTR)
udev_dbg(udev_monitor->udev, "unable to receive message\n"); log_debug("unable to receive message\n");
return NULL; return NULL;
} }
if (buflen < 32 || (size_t)buflen >= sizeof(buf)) { if (buflen < 32 || (size_t)buflen >= sizeof(buf)) {
udev_dbg(udev_monitor->udev, "invalid message length\n"); log_debug("invalid message length\n");
return NULL; return NULL;
} }
@ -615,12 +615,12 @@ retry:
/* unicast message, check if we trust the sender */ /* unicast message, check if we trust the sender */
if (udev_monitor->snl_trusted_sender.nl.nl_pid == 0 || if (udev_monitor->snl_trusted_sender.nl.nl_pid == 0 ||
snl.nl.nl_pid != udev_monitor->snl_trusted_sender.nl.nl_pid) { snl.nl.nl_pid != udev_monitor->snl_trusted_sender.nl.nl_pid) {
udev_dbg(udev_monitor->udev, "unicast netlink message ignored\n"); log_debug("unicast netlink message ignored\n");
return NULL; return NULL;
} }
} else if (snl.nl.nl_groups == UDEV_MONITOR_KERNEL) { } else if (snl.nl.nl_groups == UDEV_MONITOR_KERNEL) {
if (snl.nl.nl_pid > 0) { if (snl.nl.nl_pid > 0) {
udev_dbg(udev_monitor->udev, "multicast kernel netlink message from pid %d ignored\n", log_debug("multicast kernel netlink message from pid %d ignored\n",
snl.nl.nl_pid); snl.nl.nl_pid);
return NULL; return NULL;
} }
@ -628,13 +628,13 @@ retry:
cmsg = CMSG_FIRSTHDR(&smsg); cmsg = CMSG_FIRSTHDR(&smsg);
if (cmsg == NULL || cmsg->cmsg_type != SCM_CREDENTIALS) { if (cmsg == NULL || cmsg->cmsg_type != SCM_CREDENTIALS) {
udev_dbg(udev_monitor->udev, "no sender credentials received, message ignored\n"); log_debug("no sender credentials received, message ignored\n");
return NULL; return NULL;
} }
cred = (struct ucred *)CMSG_DATA(cmsg); cred = (struct ucred *)CMSG_DATA(cmsg);
if (cred->uid != 0) { if (cred->uid != 0) {
udev_dbg(udev_monitor->udev, "sender uid=%d, message ignored\n", cred->uid); log_debug("sender uid=%d, message ignored\n", cred->uid);
return NULL; return NULL;
} }
@ -648,7 +648,7 @@ retry:
/* udev message needs proper version magic */ /* udev message needs proper version magic */
nlh = (struct udev_monitor_netlink_header *) buf; nlh = (struct udev_monitor_netlink_header *) buf;
if (nlh->magic != htonl(UDEV_MONITOR_MAGIC)) { if (nlh->magic != htonl(UDEV_MONITOR_MAGIC)) {
udev_dbg(udev_monitor->udev, "unrecognized message signature (%x != %x)\n", log_debug("unrecognized message signature (%x != %x)\n",
nlh->magic, htonl(UDEV_MONITOR_MAGIC)); nlh->magic, htonl(UDEV_MONITOR_MAGIC));
udev_device_unref(udev_device); udev_device_unref(udev_device);
return NULL; return NULL;
@ -666,14 +666,14 @@ retry:
/* kernel message with header */ /* kernel message with header */
bufpos = strlen(buf) + 1; bufpos = strlen(buf) + 1;
if ((size_t)bufpos < sizeof("a@/d") || bufpos >= buflen) { if ((size_t)bufpos < sizeof("a@/d") || bufpos >= buflen) {
udev_dbg(udev_monitor->udev, "invalid message length\n"); log_debug("invalid message length\n");
udev_device_unref(udev_device); udev_device_unref(udev_device);
return NULL; return NULL;
} }
/* check message header */ /* check message header */
if (strstr(buf, "@/") == NULL) { if (strstr(buf, "@/") == NULL) {
udev_dbg(udev_monitor->udev, "unrecognized message header\n"); log_debug("unrecognized message header\n");
udev_device_unref(udev_device); udev_device_unref(udev_device);
return NULL; return NULL;
} }
@ -694,7 +694,7 @@ retry:
} }
if (udev_device_add_property_from_string_parse_finish(udev_device) < 0) { if (udev_device_add_property_from_string_parse_finish(udev_device) < 0) {
udev_dbg(udev_monitor->udev, "missing values, invalid device\n"); log_debug("missing values, invalid device\n");
udev_device_unref(udev_device); udev_device_unref(udev_device);
return NULL; return NULL;
} }
@ -778,7 +778,7 @@ int udev_monitor_send_device(struct udev_monitor *udev_monitor,
smsg.msg_name = &udev_monitor->snl_destination; smsg.msg_name = &udev_monitor->snl_destination;
smsg.msg_namelen = sizeof(struct sockaddr_nl); smsg.msg_namelen = sizeof(struct sockaddr_nl);
count = sendmsg(udev_monitor->sock, &smsg, 0); count = sendmsg(udev_monitor->sock, &smsg, 0);
udev_dbg(udev_monitor->udev, "passed %zi bytes to netlink monitor %p\n", count, udev_monitor); log_debug("passed %zi bytes to netlink monitor %p\n", count, udev_monitor);
return count; return count;
} }

View File

@ -33,15 +33,6 @@
#define READ_END 0 #define READ_END 0
#define WRITE_END 1 #define WRITE_END 1
/* avoid (sometimes expensive) calculations of parameters for debug output */
#define udev_log_cond(udev, prio, arg...) \
do { \
if (udev_get_log_priority(udev) >= prio) \
udev_log(udev, prio, __FILE__, __LINE__, __FUNCTION__, ## arg); \
} while (0)
#define udev_dbg(udev, arg...) udev_log_cond(udev, LOG_DEBUG, ## arg)
/* libudev.c */ /* libudev.c */
void udev_log(struct udev *udev, void udev_log(struct udev *udev,
int priority, const char *file, int line, const char *fn, int priority, const char *file, int line, const char *fn,

View File

@ -93,7 +93,7 @@ int util_resolve_subsys_kernel(struct udev *udev, const char *string,
strscpy(result, maxsize, val); strscpy(result, maxsize, val);
else else
result[0] = '\0'; result[0] = '\0';
udev_dbg(udev, "value '[%s/%s]%s' is '%s'\n", subsys, sysname, attr, result); log_debug("value '[%s/%s]%s' is '%s'\n", subsys, sysname, attr, result);
} else { } else {
size_t l; size_t l;
char *s; char *s;
@ -102,7 +102,7 @@ int util_resolve_subsys_kernel(struct udev *udev, const char *string,
l = strpcpyl(&s, maxsize, udev_device_get_syspath(dev), NULL); l = strpcpyl(&s, maxsize, udev_device_get_syspath(dev), NULL);
if (attr != NULL) if (attr != NULL)
strpcpyl(&s, l, "/", attr, NULL); strpcpyl(&s, l, "/", attr, NULL);
udev_dbg(udev, "path '[%s/%s]%s' is '%s'\n", subsys, sysname, attr, result); log_debug("path '[%s/%s]%s' is '%s'\n", subsys, sysname, attr, result);
} }
udev_device_unref(dev); udev_device_unref(dev);
return 0; return 0;

View File

@ -1,7 +1,7 @@
/*** /***
This file is part of systemd. This file is part of systemd.
Copyright 2008-2012 Kay Sievers <kay@vrfy.org> Copyright 2008-2014 Kay Sievers <kay@vrfy.org>
systemd is free software; you can redistribute it and/or modify it 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 under the terms of the GNU Lesser General Public License as published by
@ -51,40 +51,18 @@ struct udev {
const char *format, va_list args); const char *format, va_list args);
void *userdata; void *userdata;
struct udev_list properties_list; struct udev_list properties_list;
int log_priority;
}; };
void udev_log(struct udev *udev,
int priority, const char *file, int line, const char *fn,
const char *format, ...)
{
va_list args;
va_start(args, format);
udev->log_fn(udev, priority, file, line, fn, format, args);
va_end(args);
}
_printf_(6,0)
static void log_stderr(struct udev *udev,
int priority, const char *file, int line, const char *fn,
const char *format, va_list args)
{
fprintf(stderr, "libudev: %s: ", fn);
vfprintf(stderr, format, args);
}
/** /**
* udev_get_userdata: * udev_get_userdata:
* @udev: udev library context * @udev: udev library context
* *
* Retrieve stored data pointer from library context. This might be useful * Retrieve stored data pointer from library context. This might be useful
* to access from callbacks like a custom log function. * to access from callbacks.
* *
* Returns: stored userdata * Returns: stored userdata
**/ **/
_public_ void *udev_get_userdata(struct udev *udev) _public_ void *udev_get_userdata(struct udev *udev) {
{
if (udev == NULL) if (udev == NULL)
return NULL; return NULL;
return udev->userdata; return udev->userdata;
@ -97,8 +75,7 @@ _public_ void *udev_get_userdata(struct udev *udev)
* *
* Store custom @userdata in the library context. * Store custom @userdata in the library context.
**/ **/
_public_ void udev_set_userdata(struct udev *udev, void *userdata) _public_ void udev_set_userdata(struct udev *udev, void *userdata) {
{
if (udev == NULL) if (udev == NULL)
return; return;
udev->userdata = userdata; udev->userdata = userdata;
@ -115,18 +92,14 @@ _public_ void udev_set_userdata(struct udev *udev, void *userdata)
* *
* Returns: a new udev library context * Returns: a new udev library context
**/ **/
_public_ struct udev *udev_new(void) _public_ struct udev *udev_new(void) {
{
struct udev *udev; struct udev *udev;
const char *env;
_cleanup_fclose_ FILE *f = NULL; _cleanup_fclose_ FILE *f = NULL;
udev = new0(struct udev, 1); udev = new0(struct udev, 1);
if (udev == NULL) if (udev == NULL)
return NULL; return NULL;
udev->refcount = 1; udev->refcount = 1;
udev->log_fn = log_stderr;
udev->log_priority = LOG_INFO;
udev_list_init(udev, &udev->properties_list, true); udev_list_init(udev, &udev->properties_list, true);
f = fopen("/etc/udev/udev.conf", "re"); f = fopen("/etc/udev/udev.conf", "re");
@ -153,7 +126,7 @@ _public_ struct udev *udev_new(void)
/* split key/value */ /* split key/value */
val = strchr(key, '='); val = strchr(key, '=');
if (val == NULL) { if (val == NULL) {
udev_dbg(udev, "/etc/udev/udev.conf:%u: missing assignment, skipping line.\n", line_nr); log_debug("/etc/udev/udev.conf:%u: missing assignment, skipping line.\n", line_nr);
continue; continue;
} }
val[0] = '\0'; val[0] = '\0';
@ -185,7 +158,7 @@ _public_ struct udev *udev_new(void)
/* unquote */ /* unquote */
if (val[0] == '"' || val[0] == '\'') { if (val[0] == '"' || val[0] == '\'') {
if (val[len-1] != val[0]) { if (val[len-1] != val[0]) {
udev_dbg(udev, "/etc/udev/udev.conf:%u: inconsistent quoting, skipping line.\n", line_nr); log_debug("/etc/udev/udev.conf:%u: inconsistent quoting, skipping line.\n", line_nr);
continue; continue;
} }
val[len-1] = '\0'; val[len-1] = '\0';
@ -197,26 +170,14 @@ _public_ struct udev *udev_new(void)
prio = util_log_priority(val); prio = util_log_priority(val);
if (prio < 0) if (prio < 0)
udev_dbg(udev, "/etc/udev/udev.conf:%u: invalid log level '%s', ignoring.\n", line_nr, val); log_debug("/etc/udev/udev.conf:%u: invalid log level '%s', ignoring.\n", line_nr, val);
else else
udev_set_log_priority(udev, prio); log_set_max_level(prio);
continue; continue;
} }
} }
} }
/* environment overrides config */
env = secure_getenv("UDEV_LOG");
if (env != NULL) {
int prio;
prio = util_log_priority(env);
if (prio < 0)
udev_dbg(udev, "$UDEV_LOG specifies invalid log level '%s', ignoring.\n", env);
else
udev_set_log_priority(udev, prio);
}
return udev; return udev;
} }
@ -228,8 +189,7 @@ _public_ struct udev *udev_new(void)
* *
* Returns: the passed udev library context * Returns: the passed udev library context
**/ **/
_public_ struct udev *udev_ref(struct udev *udev) _public_ struct udev *udev_ref(struct udev *udev) {
{
if (udev == NULL) if (udev == NULL)
return NULL; return NULL;
udev->refcount++; udev->refcount++;
@ -245,8 +205,7 @@ _public_ struct udev *udev_ref(struct udev *udev)
* *
* Returns: the passed udev library context if it has still an active reference, or #NULL otherwise. * Returns: the passed udev library context if it has still an active reference, or #NULL otherwise.
**/ **/
_public_ struct udev *udev_unref(struct udev *udev) _public_ struct udev *udev_unref(struct udev *udev) {
{
if (udev == NULL) if (udev == NULL)
return NULL; return NULL;
udev->refcount--; udev->refcount--;
@ -262,31 +221,25 @@ _public_ struct udev *udev_unref(struct udev *udev)
* @udev: udev library context * @udev: udev library context
* @log_fn: function to be called for log messages * @log_fn: function to be called for log messages
* *
* The built-in logging writes to stderr. It can be * This function is deprecated.
* overridden by a custom function, to plug log messages
* into the users' log functionality.
* *
**/ **/
_public_ void udev_set_log_fn(struct udev *udev, _public_ void udev_set_log_fn(struct udev *udev,
void (*log_fn)(struct udev *udev, void (*log_fn)(struct udev *udev,
int priority, const char *file, int line, const char *fn, int priority, const char *file, int line, const char *fn,
const char *format, va_list args)) const char *format, va_list args)) {
{ return;
udev->log_fn = log_fn;
udev_dbg(udev, "custom log function %p registered\n", log_fn);
} }
/** /**
* udev_get_log_priority: * udev_get_log_priority:
* @udev: udev library context * @udev: udev library context
* *
* The initial log level is read from the udev config file at startup. * This function is deprecated.
* *
* Returns: the current log level
**/ **/
_public_ int udev_get_log_priority(struct udev *udev) _public_ int udev_get_log_priority(struct udev *udev) {
{ return log_get_max_level();
return udev->log_priority;
} }
/** /**
@ -294,19 +247,14 @@ _public_ int udev_get_log_priority(struct udev *udev)
* @udev: udev library context * @udev: udev library context
* @priority: the new log priority * @priority: the new log priority
* *
* Set the log level. This value controls which messages are logged. * This function is deprecated.
*
**/ **/
_public_ void udev_set_log_priority(struct udev *udev, int priority) _public_ void udev_set_log_priority(struct udev *udev, int priority) {
{ log_set_max_level(priority);
char num[32];
udev->log_priority = priority;
snprintf(num, sizeof(num), "%u", udev->log_priority);
udev_add_property(udev, "UDEV_LOG", num);
} }
struct udev_list_entry *udev_add_property(struct udev *udev, const char *key, const char *value) struct udev_list_entry *udev_add_property(struct udev *udev, const char *key, const char *value) {
{
if (value == NULL) { if (value == NULL) {
struct udev_list_entry *list_entry; struct udev_list_entry *list_entry;
@ -319,7 +267,6 @@ struct udev_list_entry *udev_add_property(struct udev *udev, const char *key, co
return udev_list_entry_add(&udev->properties_list, key, value); return udev_list_entry_add(&udev->properties_list, key, value);
} }
struct udev_list_entry *udev_get_properties_list_entry(struct udev *udev) struct udev_list_entry *udev_get_properties_list_entry(struct udev *udev) {
{
return udev_list_get_entry(&udev->properties_list); return udev_list_get_entry(&udev->properties_list);
} }

View File

@ -41,9 +41,9 @@ struct udev *udev_new(void);
void udev_set_log_fn(struct udev *udev, void udev_set_log_fn(struct udev *udev,
void (*log_fn)(struct udev *udev, void (*log_fn)(struct udev *udev,
int priority, const char *file, int line, const char *fn, int priority, const char *file, int line, const char *fn,
const char *format, va_list args)); const char *format, va_list args)) __attribute__ ((deprecated));
int udev_get_log_priority(struct udev *udev); int udev_get_log_priority(struct udev *udev) __attribute__ ((deprecated));
void udev_set_log_priority(struct udev *udev, int priority); void udev_set_log_priority(struct udev *udev, int priority) __attribute__ ((deprecated));
void *udev_get_userdata(struct udev *udev); void *udev_get_userdata(struct udev *udev);
void udev_set_userdata(struct udev *udev, void *userdata); void udev_set_userdata(struct udev *udev, void *userdata);

View File

@ -34,14 +34,6 @@
#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) #define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
_printf_(6,0)
static void log_fn(struct udev *udev,
int priority, const char *file, int line, const char *fn,
const char *format, va_list args) {
printf("test-libudev: %s %s:%d ", fn, file, line);
vprintf(format, args);
}
static void print_device(struct udev_device *device) { static void print_device(struct udev_device *device) {
const char *str; const char *str;
dev_t devnum; dev_t devnum;
@ -431,9 +423,6 @@ int main(int argc, char *argv[]) {
printf("no context\n"); printf("no context\n");
return 1; return 1;
} }
udev_set_log_fn(udev, log_fn);
printf("set log: %p\n", log_fn);
while ((c = getopt_long(argc, argv, "p:s:dhV", options, NULL)) >= 0) while ((c = getopt_long(argc, argv, "p:s:dhV", options, NULL)) >= 0)
switch (c) { switch (c) {
@ -447,8 +436,8 @@ int main(int argc, char *argv[]) {
break; break;
case 'd': case 'd':
if (udev_get_log_priority(udev) < LOG_INFO) if (log_get_max_level() < LOG_INFO)
udev_set_log_priority(udev, LOG_INFO); log_set_max_level(LOG_INFO);
break; break;
case 'h': case 'h':

View File

@ -69,14 +69,6 @@
#define LONG(x) ((x)/BITS_PER_LONG) #define LONG(x) ((x)/BITS_PER_LONG)
#define test_bit(bit, array) ((array[LONG(bit)] >> OFF(bit)) & 1) #define test_bit(bit, array) ((array[LONG(bit)] >> OFF(bit)) & 1)
_printf_(6,0)
static void log_fn(struct udev *udev, int priority,
const char *file, int line, const char *fn,
const char *format, va_list args)
{
log_metav(priority, file, line, fn, format, args);
}
typedef enum { typedef enum {
ORIENTATION_UNDEFINED, ORIENTATION_UNDEFINED,
ORIENTATION_NORMAL, ORIENTATION_NORMAL,
@ -233,8 +225,6 @@ int main (int argc, char** argv)
if (udev == NULL) if (udev == NULL)
return 1; return 1;
udev_set_log_fn(udev, log_fn);
/* CLI argument parsing */ /* CLI argument parsing */
while (1) { while (1) {
int option; int option;
@ -247,7 +237,6 @@ int main (int argc, char** argv)
case 'd': case 'd':
log_set_target(LOG_TARGET_CONSOLE); log_set_target(LOG_TARGET_CONSOLE);
log_set_max_level(LOG_DEBUG); log_set_max_level(LOG_DEBUG);
udev_set_log_priority(udev, LOG_DEBUG);
log_open(); log_open();
break; break;
case 'h': case 'h':

View File

@ -405,14 +405,6 @@ out:
return ret; return ret;
} }
_printf_(6,0)
static void log_fn(struct udev *udev, int priority,
const char *file, int line, const char *fn,
const char *format, va_list args)
{
log_metav(priority, file, line, fn, format, args);
}
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
struct udev *udev; struct udev *udev;
@ -442,8 +434,6 @@ int main(int argc, char *argv[])
if (udev == NULL) if (udev == NULL)
goto exit; goto exit;
udev_set_log_fn(udev, log_fn);
while (1) { while (1) {
int option; int option;

View File

@ -37,14 +37,6 @@
#include "libudev.h" #include "libudev.h"
#include "libudev-private.h" #include "libudev-private.h"
_printf_(6,0)
static void log_fn(struct udev *udev, int priority,
const char *file, int line, const char *fn,
const char *format, va_list args)
{
log_metav(priority, file, line, fn, format, args);
}
/* device info */ /* device info */
static unsigned int cd_cd_rom; static unsigned int cd_cd_rom;
static unsigned int cd_cd_r; static unsigned int cd_cd_r;
@ -875,8 +867,6 @@ int main(int argc, char *argv[])
if (udev == NULL) if (udev == NULL)
goto exit; goto exit;
udev_set_log_fn(udev, log_fn);
while (1) { while (1) {
int option; int option;
@ -897,7 +887,6 @@ int main(int argc, char *argv[])
case 'd': case 'd':
log_set_target(LOG_TARGET_CONSOLE); log_set_target(LOG_TARGET_CONSOLE);
log_set_max_level(LOG_DEBUG); log_set_max_level(LOG_DEBUG);
udev_set_log_priority(udev, LOG_DEBUG);
log_open(); log_open();
break; break;
case 'h': case 'h':

View File

@ -63,14 +63,6 @@ static char model_enc_str[256];
static char revision_str[16]; static char revision_str[16];
static char type_str[16]; static char type_str[16];
_printf_(6,0)
static void log_fn(struct udev *udev, int priority,
const char *file, int line, const char *fn,
const char *format, va_list args)
{
log_metav(priority, file, line, fn, format, args);
}
static void set_type(const char *from, char *to, size_t len) static void set_type(const char *from, char *to, size_t len)
{ {
int type_num; int type_num;
@ -390,7 +382,6 @@ static int set_options(struct udev *udev,
case 'v': case 'v':
log_set_target(LOG_TARGET_CONSOLE); log_set_target(LOG_TARGET_CONSOLE);
log_set_max_level(LOG_DEBUG); log_set_max_level(LOG_DEBUG);
udev_set_log_priority(udev, LOG_DEBUG);
log_open(); log_open();
break; break;
@ -591,8 +582,6 @@ int main(int argc, char **argv)
if (udev == NULL) if (udev == NULL)
goto exit; goto exit;
udev_set_log_fn(udev, log_fn);
/* /*
* Get config file options. * Get config file options.
*/ */

View File

@ -676,7 +676,6 @@ int udev_event_spawn(struct udev_event *event,
usec_t timeout_warn_usec, usec_t timeout_warn_usec,
const char *cmd, char **envp, const sigset_t *sigmask, const char *cmd, char **envp, const sigset_t *sigmask,
char *result, size_t ressize) { char *result, size_t ressize) {
struct udev *udev = event->udev;
int outpipe[2] = {-1, -1}; int outpipe[2] = {-1, -1};
int errpipe[2] = {-1, -1}; int errpipe[2] = {-1, -1};
pid_t pid; pid_t pid;
@ -689,14 +688,14 @@ int udev_event_spawn(struct udev_event *event,
udev_build_argv(event->udev, arg, NULL, argv); udev_build_argv(event->udev, arg, NULL, argv);
/* pipes from child to parent */ /* pipes from child to parent */
if (result != NULL || udev_get_log_priority(udev) >= LOG_INFO) { if (result != NULL || log_get_max_level() >= LOG_INFO) {
if (pipe2(outpipe, O_NONBLOCK) != 0) { if (pipe2(outpipe, O_NONBLOCK) != 0) {
err = -errno; err = -errno;
log_error("pipe failed: %m"); log_error("pipe failed: %m");
goto out; goto out;
} }
} }
if (udev_get_log_priority(udev) >= LOG_INFO) { if (log_get_max_level() >= LOG_INFO) {
if (pipe2(errpipe, O_NONBLOCK) != 0) { if (pipe2(errpipe, O_NONBLOCK) != 0) {
err = -errno; err = -errno;
log_error("pipe failed: %m"); log_error("pipe failed: %m");

View File

@ -98,7 +98,6 @@ int main(int argc, char *argv[]) {
log_parse_environment(); log_parse_environment();
log_open(); log_open();
udev_set_log_fn(udev, udev_main_log);
mac_selinux_init("/dev"); mac_selinux_init("/dev");
while ((c = getopt_long(argc, argv, "+dhV", options, NULL)) >= 0) while ((c = getopt_long(argc, argv, "+dhV", options, NULL)) >= 0)
@ -106,7 +105,6 @@ int main(int argc, char *argv[]) {
case 'd': case 'd':
log_set_max_level(LOG_DEBUG); log_set_max_level(LOG_DEBUG);
udev_set_log_priority(udev, LOG_DEBUG);
break; break;
case 'h': case 'h':

View File

@ -644,7 +644,6 @@ static struct udev_ctrl_connection *handle_ctrl_msg(struct udev_ctrl *uctrl) {
if (i >= 0) { if (i >= 0) {
log_debug("udevd message (SET_LOG_LEVEL) received, log_priority=%i", i); log_debug("udevd message (SET_LOG_LEVEL) received, log_priority=%i", i);
log_set_max_level(i); log_set_max_level(i);
udev_set_log_priority(udev, i);
worker_kill(udev); worker_kill(udev);
} }
@ -984,7 +983,6 @@ static void kernel_cmdline_options(struct udev *udev) {
prio = util_log_priority(value); prio = util_log_priority(value);
log_set_max_level(prio); log_set_max_level(prio);
udev_set_log_priority(udev, prio);
} else if ((value = startswith(opt, "udev.children-max="))) { } else if ((value = startswith(opt, "udev.children-max="))) {
r = safe_atoi(value, &arg_children_max); r = safe_atoi(value, &arg_children_max);
if (r < 0) if (r < 0)
@ -1120,19 +1118,14 @@ int main(int argc, char *argv[]) {
log_parse_environment(); log_parse_environment();
log_open(); log_open();
udev_set_log_fn(udev, udev_main_log);
log_set_max_level(udev_get_log_priority(udev));
r = parse_argv(argc, argv); r = parse_argv(argc, argv);
if (r <= 0) if (r <= 0)
goto exit; goto exit;
kernel_cmdline_options(udev); kernel_cmdline_options(udev);
if (arg_debug) { if (arg_debug)
log_set_max_level(LOG_DEBUG); log_set_max_level(LOG_DEBUG);
udev_set_log_priority(udev, LOG_DEBUG);
}
if (getuid() != 0) { if (getuid() != 0) {
log_error("root privileges required"); log_error("root privileges required");