[systemd-commits] 3 commits - src/libudev src/shared src/udev

Kay Sievers kay at kemper.freedesktop.org
Sun Apr 29 10:18:29 PDT 2012


 src/libudev/libudev-device-private.c |    4 ++--
 src/libudev/libudev-device.c         |   10 +++++-----
 src/libudev/libudev-list.c           |    8 ++------
 src/libudev/libudev-monitor.c        |   28 ++++++++++++++--------------
 src/libudev/libudev-private.h        |    6 +++---
 src/libudev/libudev-queue-private.c  |    8 ++++----
 src/libudev/libudev-queue.c          |    4 ++--
 src/libudev/libudev-util.c           |   12 ++++++------
 src/libudev/libudev.c                |    6 +++---
 src/shared/util.h                    |   11 +++++++++++
 src/udev/collect/collect.c           |    8 ++------
 src/udev/udevd.c                     |   16 ++++------------
 12 files changed, 58 insertions(+), 63 deletions(-)

New commits:
commit b27ee00bf5e377a4b59b454c68c8617ea9666bc8
Author: Lucas De Marchi <lucas.demarchi at profusion.mobi>
Date:   Thu Apr 26 13:36:02 2012 -0300

    udev: use container_of() macro

diff --git a/src/libudev/libudev-list.c b/src/libudev/libudev-list.c
index 1fe46f3..aec334b 100644
--- a/src/libudev/libudev-list.c
+++ b/src/libudev/libudev-list.c
@@ -80,13 +80,9 @@ void udev_list_node_remove(struct udev_list_node *entry)
 }
 
 /* return list entry which embeds this node */
-static struct udev_list_entry *list_node_to_entry(struct udev_list_node *node)
+static inline struct udev_list_entry *list_node_to_entry(struct udev_list_node *node)
 {
-        char *list;
-
-        list = (char *)node;
-        list -= offsetof(struct udev_list_entry, node);
-        return (struct udev_list_entry *)list;
+        return container_of(node, struct udev_list_entry, node);
 }
 
 void udev_list_init(struct udev *udev, struct udev_list *list, bool unique)
diff --git a/src/udev/collect/collect.c b/src/udev/collect/collect.c
index 882564a..7775429 100644
--- a/src/udev/collect/collect.c
+++ b/src/udev/collect/collect.c
@@ -55,13 +55,9 @@ static int debug;
 /* This can increase dynamically */
 static size_t bufsize = BUFSIZE;
 
-static struct _mate *node_to_mate(struct udev_list_node *node)
+static inline struct _mate *node_to_mate(struct udev_list_node *node)
 {
-        char *mate;
-
-        mate = (char *)node;
-        mate -= offsetof(struct _mate, node);
-        return (struct _mate *)mate;
+        return container_of(node, struct _mate, node);
 }
 
 static void sig_alrm(int signo)
diff --git a/src/udev/udevd.c b/src/udev/udevd.c
index 59e2cfa..0d85960 100644
--- a/src/udev/udevd.c
+++ b/src/udev/udevd.c
@@ -99,13 +99,9 @@ struct event {
         int ifindex;
 };
 
-static struct event *node_to_event(struct udev_list_node *node)
+static inline struct event *node_to_event(struct udev_list_node *node)
 {
-        char *event;
-
-        event = (char *)node;
-        event -= offsetof(struct event, node);
-        return (struct event *)event;
+        return container_of(node, struct event, node);
 }
 
 static void event_queue_cleanup(struct udev *udev, enum event_state type);
@@ -134,13 +130,9 @@ struct worker_message {
         int exitcode;
 };
 
-static struct worker *node_to_worker(struct udev_list_node *node)
+static inline struct worker *node_to_worker(struct udev_list_node *node)
 {
-        char *worker;
-
-        worker = (char *)node;
-        worker -= offsetof(struct worker, node);
-        return (struct worker *)worker;
+        return container_of(node, struct worker, node);
 }
 
 static void event_queue_delete(struct event *event, bool export)

commit c4326aa4af424ada8ab9e6fe77035db1cf222ffa
Author: Lucas De Marchi <lucas.demarchi at profusion.mobi>
Date:   Thu Apr 26 13:36:01 2012 -0300

    util: introduce container_of() macro
    
    This macro comes from kernel and it's useful for unwrapping structs
    inside another one. The generated code is actually the same to the one
    where this logic is used in udev, but using this macro is much cleaner
    and less error prone.

diff --git a/src/shared/util.h b/src/shared/util.h
index 17ffd19..0246dfd 100644
--- a/src/shared/util.h
+++ b/src/shared/util.h
@@ -59,6 +59,17 @@ typedef struct dual_timestamp {
 #define USEC_PER_MONTH (2629800ULL*USEC_PER_SEC)
 #define USEC_PER_YEAR (31557600ULL*USEC_PER_SEC)
 
+/*
+ * container_of - cast a member of a structure out to the containing structure
+ * @ptr: the pointer to the member.
+ * @type: the type of the container struct this is embedded in.
+ * @member: the name of the member within the struct.
+ *
+ */
+#define container_of(ptr, type, member) ({ \
+        const typeof( ((type *)0)->member ) *__mptr = (ptr); \
+        (type *)( (char *)__mptr - offsetof(type,member) );})
+
 /* What is interpreted as whitespace? */
 #define WHITESPACE " \t\n\r"
 #define NEWLINE "\n\r"

commit c8f8394a9309d4390daac70b736b34d0b6734f95
Author: Kay Sievers <kay at vrfy.org>
Date:   Thu Apr 26 17:43:48 2012 +0200

    libudev: prefix log macros with 'udev_'

diff --git a/src/libudev/libudev-device-private.c b/src/libudev/libudev-device-private.c
index 2c50e17..2347736 100644
--- a/src/libudev/libudev-device-private.c
+++ b/src/libudev/libudev-device-private.c
@@ -122,7 +122,7 @@ int udev_device_update_db(struct udev_device *udev_device)
         mkdir_parents(filename_tmp, 0755);
         f = fopen(filename_tmp, "we");
         if (f == NULL) {
-                err(udev, "unable to create temporary db file '%s': %m\n", filename_tmp);
+                udev_err(udev, "unable to create temporary db file '%s': %m\n", filename_tmp);
                 return -1;
         }
 
@@ -162,7 +162,7 @@ int udev_device_update_db(struct udev_device *udev_device)
 
         fclose(f);
         rename(filename_tmp, filename);
-        dbg(udev, "created %s file '%s' for '%s'\n", has_info ? "db" : "empty",
+        udev_dbg(udev, "created %s file '%s' for '%s'\n", has_info ? "db" : "empty",
              filename, udev_device_get_devpath(udev_device));
         return 0;
 }
diff --git a/src/libudev/libudev-device.c b/src/libudev/libudev-device.c
index 97cf665..9ef4610 100644
--- a/src/libudev/libudev-device.c
+++ b/src/libudev/libudev-device.c
@@ -485,7 +485,7 @@ int udev_device_read_db(struct udev_device *udev_device, const char *dbfile)
 
         f = fopen(dbfile, "re");
         if (f == NULL) {
-                dbg(udev_device->udev, "no db file to read %s: %m\n", dbfile);
+                udev_dbg(udev_device->udev, "no db file to read %s: %m\n", dbfile);
                 return -1;
         }
         udev_device->is_initialized = true;
@@ -525,7 +525,7 @@ int udev_device_read_db(struct udev_device *udev_device, const char *dbfile)
         }
         fclose(f);
 
-        dbg(udev_device->udev, "device %p filled with db file data\n", udev_device);
+        udev_dbg(udev_device->udev, "device %p filled with db file data\n", udev_device);
         return 0;
 }
 
@@ -643,7 +643,7 @@ _public_ struct udev_device *udev_device_new_from_syspath(struct udev *udev, con
 
         /* path starts in sys */
         if (!startswith(syspath, TEST_PREFIX "/sys")) {
-                dbg(udev, "not in sys :%s\n", syspath);
+                udev_dbg(udev, "not in sys :%s\n", syspath);
                 return NULL;
         }
 
@@ -675,7 +675,7 @@ _public_ struct udev_device *udev_device_new_from_syspath(struct udev *udev, con
                 return NULL;
 
         udev_device_set_syspath(udev_device, path);
-        dbg(udev, "device %p has devpath '%s'\n", udev_device, udev_device_get_devpath(udev_device));
+        udev_dbg(udev, "device %p has devpath '%s'\n", udev_device, udev_device_get_devpath(udev_device));
 
         return udev_device;
 }
@@ -877,7 +877,7 @@ _public_ struct udev_device *udev_device_new_from_environment(struct udev *udev)
                 udev_device_add_property_from_string_parse(udev_device, environ[i]);
 
         if (udev_device_add_property_from_string_parse_finish(udev_device) < 0) {
-                dbg(udev, "missing values, invalid device\n");
+                udev_dbg(udev, "missing values, invalid device\n");
                 udev_device_unref(udev_device);
                 udev_device = NULL;
         }
diff --git a/src/libudev/libudev-monitor.c b/src/libudev/libudev-monitor.c
index 73a9c48..5f448e6 100644
--- a/src/libudev/libudev-monitor.c
+++ b/src/libudev/libudev-monitor.c
@@ -109,7 +109,7 @@ static struct udev_monitor *udev_monitor_new(struct udev *udev)
 struct udev_monitor *udev_monitor_new_from_socket(struct udev *udev, const char *socket_path);
 _public_ struct udev_monitor *udev_monitor_new_from_socket(struct udev *udev, const char *socket_path)
 {
-        err(udev, "udev_monitor_new_from_socket() does not do anything; please migrate to netlink\n");
+        udev_err(udev, "udev_monitor_new_from_socket() does not do anything; please migrate to netlink\n");
         errno = ENOSYS;
         return NULL;
 }
@@ -138,7 +138,7 @@ struct udev_monitor *udev_monitor_new_from_netlink_fd(struct udev *udev, const c
         if (fd < 0) {
                 udev_monitor->sock = socket(PF_NETLINK, SOCK_RAW|SOCK_CLOEXEC|SOCK_NONBLOCK, NETLINK_KOBJECT_UEVENT);
                 if (udev_monitor->sock == -1) {
-                        err(udev, "error getting socket: %m\n");
+                        udev_err(udev, "error getting socket: %m\n");
                         free(udev_monitor);
                         return NULL;
                 }
@@ -358,7 +358,7 @@ _public_ int udev_monitor_enable_receiving(struct udev_monitor *udev_monitor)
                 if (err == 0)
                         udev_monitor->snl.nl.nl_pid = snl.nl.nl_pid;
         } else {
-                err(udev_monitor->udev, "bind failed: %m\n");
+                udev_err(udev_monitor->udev, "bind failed: %m\n");
                 return err;
         }
 
@@ -547,12 +547,12 @@ retry:
         buflen = recvmsg(udev_monitor->sock, &smsg, 0);
         if (buflen < 0) {
                 if (errno != EINTR)
-                        dbg(udev_monitor->udev, "unable to receive message\n");
+                        udev_dbg(udev_monitor->udev, "unable to receive message\n");
                 return NULL;
         }
 
         if (buflen < 32 || (size_t)buflen >= sizeof(buf)) {
-                dbg(udev_monitor->udev, "invalid message length\n");
+                udev_dbg(udev_monitor->udev, "invalid message length\n");
                 return NULL;
         }
 
@@ -561,12 +561,12 @@ retry:
                         /* unicast message, check if we trust the sender */
                         if (udev_monitor->snl_trusted_sender.nl.nl_pid == 0 ||
                             snl.nl.nl_pid != udev_monitor->snl_trusted_sender.nl.nl_pid) {
-                                dbg(udev_monitor->udev, "unicast netlink message ignored\n");
+                                udev_dbg(udev_monitor->udev, "unicast netlink message ignored\n");
                                 return NULL;
                         }
                 } else if (snl.nl.nl_groups == UDEV_MONITOR_KERNEL) {
                         if (snl.nl.nl_pid > 0) {
-                                dbg(udev_monitor->udev, "multicast kernel netlink message from pid %d ignored\n",
+                                udev_dbg(udev_monitor->udev, "multicast kernel netlink message from pid %d ignored\n",
                                      snl.nl.nl_pid);
                                 return NULL;
                         }
@@ -575,13 +575,13 @@ retry:
 
         cmsg = CMSG_FIRSTHDR(&smsg);
         if (cmsg == NULL || cmsg->cmsg_type != SCM_CREDENTIALS) {
-                dbg(udev_monitor->udev, "no sender credentials received, message ignored\n");
+                udev_dbg(udev_monitor->udev, "no sender credentials received, message ignored\n");
                 return NULL;
         }
 
         cred = (struct ucred *)CMSG_DATA(cmsg);
         if (cred->uid != 0) {
-                dbg(udev_monitor->udev, "sender uid=%d, message ignored\n", cred->uid);
+                udev_dbg(udev_monitor->udev, "sender uid=%d, message ignored\n", cred->uid);
                 return NULL;
         }
 
@@ -589,7 +589,7 @@ retry:
                 /* udev message needs proper version magic */
                 nlh = (struct udev_monitor_netlink_header *) buf;
                 if (nlh->magic != htonl(UDEV_MONITOR_MAGIC)) {
-                        err(udev_monitor->udev, "unrecognized message signature (%x != %x)\n",
+                        udev_err(udev_monitor->udev, "unrecognized message signature (%x != %x)\n",
                             nlh->magic, htonl(UDEV_MONITOR_MAGIC));
                         return NULL;
                 }
@@ -600,13 +600,13 @@ retry:
                 /* kernel message with header */
                 bufpos = strlen(buf) + 1;
                 if ((size_t)bufpos < sizeof("a@/d") || bufpos >= buflen) {
-                        dbg(udev_monitor->udev, "invalid message length\n");
+                        udev_dbg(udev_monitor->udev, "invalid message length\n");
                         return NULL;
                 }
 
                 /* check message header */
                 if (strstr(buf, "@/") == NULL) {
-                        dbg(udev_monitor->udev, "unrecognized message header\n");
+                        udev_dbg(udev_monitor->udev, "unrecognized message header\n");
                         return NULL;
                 }
         }
@@ -629,7 +629,7 @@ retry:
         }
 
         if (udev_device_add_property_from_string_parse_finish(udev_device) < 0) {
-                dbg(udev_monitor->udev, "missing values, invalid device\n");
+                udev_dbg(udev_monitor->udev, "missing values, invalid device\n");
                 udev_device_unref(udev_device);
                 return NULL;
         }
@@ -716,7 +716,7 @@ int udev_monitor_send_device(struct udev_monitor *udev_monitor,
                 smsg.msg_name = &udev_monitor->snl_destination;
         smsg.msg_namelen = sizeof(struct sockaddr_nl);
         count = sendmsg(udev_monitor->sock, &smsg, 0);
-        dbg(udev_monitor->udev, "passed %zi bytes to netlink monitor %p\n", count, udev_monitor);
+        udev_dbg(udev_monitor->udev, "passed %zi bytes to netlink monitor %p\n", count, udev_monitor);
         return count;
 }
 
diff --git a/src/libudev/libudev-private.h b/src/libudev/libudev-private.h
index eb2657a..4eb4a59 100644
--- a/src/libudev/libudev-private.h
+++ b/src/libudev/libudev-private.h
@@ -36,9 +36,9 @@
       udev_log(udev, prio, __FILE__, __LINE__, __FUNCTION__, ## arg); \
   } while (0)
 
-#define dbg(udev, arg...) udev_log_cond(udev, LOG_DEBUG, ## arg)
-#define info(udev, arg...) udev_log_cond(udev, LOG_INFO, ## arg)
-#define err(udev, arg...) udev_log_cond(udev, LOG_ERR, ## arg)
+#define udev_dbg(udev, arg...) udev_log_cond(udev, LOG_DEBUG, ## arg)
+#define udev_info(udev, arg...) udev_log_cond(udev, LOG_INFO, ## arg)
+#define udev_err(udev, arg...) udev_log_cond(udev, LOG_ERR, ## arg)
 
 /* libudev.c */
 void udev_log(struct udev *udev,
diff --git a/src/libudev/libudev-queue-private.c b/src/libudev/libudev-queue-private.c
index f653e6d..3df99be 100644
--- a/src/libudev/libudev-queue-private.c
+++ b/src/libudev/libudev-queue-private.c
@@ -151,7 +151,7 @@ static struct queue_devpaths *build_index(struct udev_queue_export *udev_queue_e
         /* allocate the table */
         range = udev_queue_export->seqnum_min - udev_queue_export->seqnum_max;
         if (range - 1 > INT_MAX) {
-                err(udev_queue_export->udev, "queue file overflow\n");
+                udev_err(udev_queue_export->udev, "queue file overflow\n");
                 return NULL;
         }
         devpaths = calloc(1, sizeof(struct queue_devpaths) + (range + 1) * sizeof(long));
@@ -188,7 +188,7 @@ static struct queue_devpaths *build_index(struct udev_queue_export *udev_queue_e
         return devpaths;
 
 read_error:
-        err(udev_queue_export->udev, "queue file corrupted\n");
+        udev_err(udev_queue_export->udev, "queue file corrupted\n");
         free(devpaths);
         return NULL;
 }
@@ -256,7 +256,7 @@ static int rebuild_queue_file(struct udev_queue_export *udev_queue_export)
         return 0;
 
 error:
-        err(udev_queue_export->udev, "failed to create queue file: %m\n");
+        udev_err(udev_queue_export->udev, "failed to create queue file: %m\n");
         udev_queue_export_cleanup(udev_queue_export);
 
         if (udev_queue_export->queue_file != NULL) {
@@ -303,7 +303,7 @@ static int write_queue_record(struct udev_queue_export *udev_queue_export,
 write_error:
         /* if we failed half way through writing a record to a file,
            we should not try to write any further records to it. */
-        err(udev_queue_export->udev, "error writing to queue file: %m\n");
+        udev_err(udev_queue_export->udev, "error writing to queue file: %m\n");
         fclose(udev_queue_export->queue_file);
         udev_queue_export->queue_file = NULL;
 
diff --git a/src/libudev/libudev-queue.c b/src/libudev/libudev-queue.c
index e2e6319..81f40db 100644
--- a/src/libudev/libudev-queue.c
+++ b/src/libudev/libudev-queue.c
@@ -216,7 +216,7 @@ static FILE *open_queue_file(struct udev_queue *udev_queue, unsigned long long i
                 return NULL;
 
         if (udev_queue_read_seqnum(queue_file, seqnum_start) < 0) {
-                err(udev_queue->udev, "corrupt queue file\n");
+                udev_err(udev_queue->udev, "corrupt queue file\n");
                 fclose(queue_file);
                 return NULL;
         }
@@ -473,7 +473,7 @@ _public_ struct udev_list_entry *udev_queue_get_queued_list_entry(struct udev_qu
 struct udev_list_entry *udev_queue_get_failed_list_entry(struct udev_queue *udev_queue);
 _public_ struct udev_list_entry *udev_queue_get_failed_list_entry(struct udev_queue *udev_queue)
 {
-        err(udev_queue->udev, "udev_queue_get_failed_list_entry() does not return anything; failed events are not recorded\n");
+        udev_err(udev_queue->udev, "udev_queue_get_failed_list_entry() does not return anything; failed events are not recorded\n");
         errno = ENOSYS;
         return NULL;
 }
diff --git a/src/libudev/libudev-util.c b/src/libudev/libudev-util.c
index 944d9df..8e6d5b6 100644
--- a/src/libudev/libudev-util.c
+++ b/src/libudev/libudev-util.c
@@ -85,9 +85,9 @@ uid_t util_lookup_user(struct udev *udev, const char *user)
         if (pw != NULL)
                 return pw->pw_uid;
         if (errno == 0 || errno == ENOENT || errno == ESRCH)
-                err(udev, "specified user '%s' unknown\n", user);
+                udev_err(udev, "specified user '%s' unknown\n", user);
         else
-                err(udev, "error resolving user '%s': %m\n", user);
+                udev_err(udev, "error resolving user '%s': %m\n", user);
         return 0;
 }
 
@@ -120,9 +120,9 @@ gid_t util_lookup_group(struct udev *udev, const char *group)
                         buflen *= 2;
                         continue;
                 } else if (errno == 0 || errno == ENOENT || errno == ESRCH) {
-                        err(udev, "specified group '%s' unknown\n", group);
+                        udev_err(udev, "specified group '%s' unknown\n", group);
                 } else {
-                        err(udev, "error resolving group '%s': %m\n", group);
+                        udev_err(udev, "error resolving group '%s': %m\n", group);
                 }
                 break;
         }
@@ -178,7 +178,7 @@ int util_resolve_subsys_kernel(struct udev *udev, const char *string,
                         util_strscpy(result, maxsize, val);
                 else
                         result[0] = '\0';
-                dbg(udev, "value '[%s/%s]%s' is '%s'\n", subsys, sysname, attr, result);
+                udev_dbg(udev, "value '[%s/%s]%s' is '%s'\n", subsys, sysname, attr, result);
         } else {
                 size_t l;
                 char *s;
@@ -187,7 +187,7 @@ int util_resolve_subsys_kernel(struct udev *udev, const char *string,
                 l = util_strpcpyl(&s, maxsize, udev_device_get_syspath(dev), NULL);
                 if (attr != NULL)
                         util_strpcpyl(&s, l, "/", attr, NULL);
-                dbg(udev, "path '[%s/%s]%s' is '%s'\n", subsys, sysname, attr, result);
+                udev_dbg(udev, "path '[%s/%s]%s' is '%s'\n", subsys, sysname, attr, result);
         }
         udev_device_unref(dev);
         return 0;
diff --git a/src/libudev/libudev.c b/src/libudev/libudev.c
index 212c5fd..a0ec39d 100644
--- a/src/libudev/libudev.c
+++ b/src/libudev/libudev.c
@@ -143,7 +143,7 @@ _public_ struct udev *udev_new(void)
                         /* split key/value */
                         val = strchr(key, '=');
                         if (val == NULL) {
-                                err(udev, "missing <key>=<value> in " SYSCONFDIR "/udev/udev.conf[%i]; skip line\n", line_nr);
+                                udev_err(udev, "missing <key>=<value> in " SYSCONFDIR "/udev/udev.conf[%i]; skip line\n", line_nr);
                                 continue;
                         }
                         val[0] = '\0';
@@ -175,7 +175,7 @@ _public_ struct udev *udev_new(void)
                         /* unquote */
                         if (val[0] == '"' || val[0] == '\'') {
                                 if (val[len-1] != val[0]) {
-                                        err(udev, "inconsistent quoting in " SYSCONFDIR "/udev/udev.conf[%i]; skip line\n", line_nr);
+                                        udev_err(udev, "inconsistent quoting in " SYSCONFDIR "/udev/udev.conf[%i]; skip line\n", line_nr);
                                         continue;
                                 }
                                 val[len-1] = '\0';
@@ -249,7 +249,7 @@ _public_ void udev_set_log_fn(struct udev *udev,
                                     const char *format, va_list args))
 {
         udev->log_fn = log_fn;
-        dbg(udev, "custom logging function %p registered\n", log_fn);
+        udev_dbg(udev, "custom logging function %p registered\n", log_fn);
 }
 
 /**



More information about the systemd-commits mailing list