summary refs log tree commit diff
path: root/shared/nm-udev-aux/nm-udev-utils.c
diff options
context:
space:
mode:
Diffstat (limited to 'shared/nm-udev-aux/nm-udev-utils.c')
-rw-r--r--shared/nm-udev-aux/nm-udev-utils.c359
1 files changed, 175 insertions, 184 deletions
diff --git a/shared/nm-udev-aux/nm-udev-utils.c b/shared/nm-udev-aux/nm-udev-utils.c
index c00dcd33..8131c04e 100644
--- a/shared/nm-udev-aux/nm-udev-utils.c
+++ b/shared/nm-udev-aux/nm-udev-utils.c
@@ -1,4 +1,4 @@
-// SPDX-License-Identifier: GPL-2.0+
+/* SPDX-License-Identifier: GPL-2.0+ */
 /*
  * Copyright (C) 2017 Red Hat, Inc.
  */
@@ -10,181 +10,172 @@
 #include <libudev.h>
 
 struct _NMPUdevClient {
-	char **subsystems;
-	GSource *watch_source;
-	struct udev *udev;
-	struct udev_monitor *monitor;
-	NMUdevClientEvent event_handler;
-	gpointer event_user_data;
+    char **              subsystems;
+    GSource *            watch_source;
+    struct udev *        udev;
+    struct udev_monitor *monitor;
+    NMUdevClientEvent    event_handler;
+    gpointer             event_user_data;
 };
 
 /*****************************************************************************/
 
 gboolean
-nm_udev_utils_property_as_boolean (const char *uproperty)
+nm_udev_utils_property_as_boolean(const char *uproperty)
 {
-	/* taken from g_udev_device_get_property_as_boolean() */
-
-	if (uproperty) {
-		if (   strcmp (uproperty, "1") == 0
-		    || g_ascii_strcasecmp (uproperty, "true") == 0)
-			return TRUE;
-	}
-	return FALSE;
+    /* taken from g_udev_device_get_property_as_boolean() */
+
+    if (uproperty) {
+        if (strcmp(uproperty, "1") == 0 || g_ascii_strcasecmp(uproperty, "true") == 0)
+            return TRUE;
+    }
+    return FALSE;
 }
 
 const char *
-nm_udev_utils_property_decode (const char *uproperty, char **to_free)
+nm_udev_utils_property_decode(const char *uproperty, char **to_free)
 {
-	const char *p;
-	char *unescaped = NULL;
-	char *n = NULL;
-
-	if (!uproperty) {
-		*to_free = NULL;
-		return NULL;
-	}
-
-	p = uproperty;
-	while (*p) {
-		int a, b;
-
-		if (   p[0] == '\\'
-		    && p[1] == 'x'
-		    && (a = g_ascii_xdigit_value (p[2])) >= 0
-		    && (b = g_ascii_xdigit_value (p[3])) >= 0
-		    && (a || b)) {
-			if (!n) {
-				gssize l = p - uproperty;
-
-				unescaped = g_malloc (l + strlen (p) + 1 - 3);
-				memcpy (unescaped, uproperty, l);
-				n = &unescaped[l];
-			}
-			*n++ = (a << 4) | b;
-			p += 4;
-		} else {
-			if (n)
-				*n++ = *p;
-			p++;
-		}
-	}
-
-	if (!n) {
-		*to_free = NULL;
-		return uproperty;
-	}
-
-	*n++ = '\0';
-	return (*to_free = unescaped);
+    const char *p;
+    char *      unescaped = NULL;
+    char *      n         = NULL;
+
+    if (!uproperty) {
+        *to_free = NULL;
+        return NULL;
+    }
+
+    p = uproperty;
+    while (*p) {
+        int a, b;
+
+        if (p[0] == '\\' && p[1] == 'x' && (a = g_ascii_xdigit_value(p[2])) >= 0
+            && (b = g_ascii_xdigit_value(p[3])) >= 0 && (a || b)) {
+            if (!n) {
+                gssize l = p - uproperty;
+
+                unescaped = g_malloc(l + strlen(p) + 1 - 3);
+                memcpy(unescaped, uproperty, l);
+                n = &unescaped[l];
+            }
+            *n++ = (a << 4) | b;
+            p += 4;
+        } else {
+            if (n)
+                *n++ = *p;
+            p++;
+        }
+    }
+
+    if (!n) {
+        *to_free = NULL;
+        return uproperty;
+    }
+
+    *n++ = '\0';
+    return (*to_free = unescaped);
 }
 
 char *
-nm_udev_utils_property_decode_cp (const char *uproperty)
+nm_udev_utils_property_decode_cp(const char *uproperty)
 {
-	char *cpy;
+    char *cpy;
 
-	uproperty = nm_udev_utils_property_decode (uproperty, &cpy);
-	return cpy ?: g_strdup (uproperty);
+    uproperty = nm_udev_utils_property_decode(uproperty, &cpy);
+    return cpy ?: g_strdup(uproperty);
 }
 
 /*****************************************************************************/
 
 static void
-_subsystem_split (const char *subsystem_full,
-                  const char **out_subsystem,
-                  const char **out_devtype,
-                  char **to_free)
+_subsystem_split(const char * subsystem_full,
+                 const char **out_subsystem,
+                 const char **out_devtype,
+                 char **      to_free)
 {
-	char *tmp, *s;
-
-	nm_assert (subsystem_full);
-	nm_assert (out_subsystem);
-	nm_assert (out_devtype);
-	nm_assert (to_free);
-
-	s = strstr (subsystem_full, "/");
-	if (s) {
-		tmp = g_strdup (subsystem_full);
-		s = &tmp[s - subsystem_full];
-		*s = '\0';
-		*out_subsystem = tmp;
-		*out_devtype = &s[1];
-		*to_free = tmp;
-	} else {
-		*out_subsystem = subsystem_full;
-		*out_devtype = NULL;
-		*to_free = NULL;
-	}
+    char *tmp, *s;
+
+    nm_assert(subsystem_full);
+    nm_assert(out_subsystem);
+    nm_assert(out_devtype);
+    nm_assert(to_free);
+
+    s = strstr(subsystem_full, "/");
+    if (s) {
+        tmp            = g_strdup(subsystem_full);
+        s              = &tmp[s - subsystem_full];
+        *s             = '\0';
+        *out_subsystem = tmp;
+        *out_devtype   = &s[1];
+        *to_free       = tmp;
+    } else {
+        *out_subsystem = subsystem_full;
+        *out_devtype   = NULL;
+        *to_free       = NULL;
+    }
 }
 
 static struct udev_enumerate *
-nm_udev_utils_enumerate (struct udev *uclient,
-                         const char *const*subsystems)
+nm_udev_utils_enumerate(struct udev *uclient, const char *const *subsystems)
 {
-	struct udev_enumerate *enumerate;
-	guint n;
+    struct udev_enumerate *enumerate;
+    guint                  n;
 
-	enumerate = udev_enumerate_new (uclient);
+    enumerate = udev_enumerate_new(uclient);
 
-	if (subsystems) {
-		for (n = 0; subsystems[n]; n++) {
-			const char *subsystem;
-			const char *devtype;
-			gs_free char *to_free = NULL;
+    if (subsystems) {
+        for (n = 0; subsystems[n]; n++) {
+            const char *  subsystem;
+            const char *  devtype;
+            gs_free char *to_free = NULL;
 
-			_subsystem_split (subsystems[n], &subsystem, &devtype, &to_free);
+            _subsystem_split(subsystems[n], &subsystem, &devtype, &to_free);
 
-			udev_enumerate_add_match_subsystem (enumerate, subsystem);
+            udev_enumerate_add_match_subsystem(enumerate, subsystem);
 
-			if (devtype != NULL)
-				udev_enumerate_add_match_property (enumerate, "DEVTYPE", devtype);
-		}
-	}
+            if (devtype != NULL)
+                udev_enumerate_add_match_property(enumerate, "DEVTYPE", devtype);
+        }
+    }
 
-	return enumerate;
+    return enumerate;
 }
 
 struct udev *
-nm_udev_client_get_udev (NMUdevClient *self)
+nm_udev_client_get_udev(NMUdevClient *self)
 {
-	g_return_val_if_fail (self, NULL);
+    g_return_val_if_fail(self, NULL);
 
-	return self->udev;
+    return self->udev;
 }
 
 struct udev_enumerate *
-nm_udev_client_enumerate_new (NMUdevClient *self)
+nm_udev_client_enumerate_new(NMUdevClient *self)
 {
-	g_return_val_if_fail (self, NULL);
+    g_return_val_if_fail(self, NULL);
 
-	return nm_udev_utils_enumerate (self->udev, (const char *const*) self->subsystems);
+    return nm_udev_utils_enumerate(self->udev, (const char *const *) self->subsystems);
 }
 
 /*****************************************************************************/
 
 static gboolean
-monitor_event (int fd,
-               GIOCondition condition,
-               gpointer user_data)
+monitor_event(int fd, GIOCondition condition, gpointer user_data)
 {
-	NMUdevClient *self = user_data;
-	struct udev_device *udevice;
+    NMUdevClient *      self = user_data;
+    struct udev_device *udevice;
 
-	if (!self->monitor)
-		goto out;
+    if (!self->monitor)
+        goto out;
 
-	udevice = udev_monitor_receive_device (self->monitor);
-	if (udevice == NULL)
-		goto out;
+    udevice = udev_monitor_receive_device(self->monitor);
+    if (udevice == NULL)
+        goto out;
 
-	self->event_handler (self,
-	                     udevice,
-	                     self->event_user_data);
-	udev_device_unref (udevice);
+    self->event_handler(self, udevice, self->event_user_data);
+    udev_device_unref(udevice);
 
 out:
-	return TRUE;
+    return TRUE;
 }
 
 /**
@@ -199,76 +190,76 @@ out:
  * Returns: a new NMUdevClient instance.
  */
 NMUdevClient *
-nm_udev_client_new (const char *const*subsystems,
-                    NMUdevClientEvent event_handler,
-                    gpointer event_user_data)
+nm_udev_client_new(const char *const *subsystems,
+                   NMUdevClientEvent  event_handler,
+                   gpointer           event_user_data)
 {
-	NMUdevClient *self;
-	guint n;
-
-	self = g_slice_new0 (NMUdevClient);
-
-	self->event_handler = event_handler;
-	self->event_user_data = event_user_data;
-	self->subsystems = subsystems && subsystems[0] ? g_strdupv ((char **) subsystems) : NULL;
-
-	self->udev = udev_new ();
-	if (!self->udev)
-		goto fail;
-
-	/* connect to event source */
-	if (self->event_handler) {
-		self->monitor = udev_monitor_new_from_netlink (self->udev, "udev");
-		if (!self->monitor)
-			goto fail;
-
-		if (self->subsystems) {
-			/* install subsystem filters to only wake up for certain events */
-			for (n = 0; self->subsystems[n]; n++) {
-				gs_free char *to_free = NULL;
-				const char *subsystem;
-				const char *devtype;
-
-				_subsystem_split (self->subsystems[n], &subsystem, &devtype, &to_free);
-				udev_monitor_filter_add_match_subsystem_devtype (self->monitor, subsystem, devtype);
-			}
-
-			/* listen to events, and buffer them */
-			udev_monitor_set_receive_buffer_size (self->monitor, 4*1024*1024);
-			udev_monitor_enable_receiving (self->monitor);
-
-			self->watch_source = nm_g_unix_fd_source_new (udev_monitor_get_fd (self->monitor),
-			                                              G_IO_IN,
-			                                              G_PRIORITY_DEFAULT,
-			                                              monitor_event,
-			                                              self,
-			                                              NULL);
-			g_source_attach (self->watch_source, g_main_context_get_thread_default ());
-		}
-	}
-
-	return self;
+    NMUdevClient *self;
+    guint         n;
+
+    self = g_slice_new0(NMUdevClient);
+
+    self->event_handler   = event_handler;
+    self->event_user_data = event_user_data;
+    self->subsystems      = subsystems && subsystems[0] ? g_strdupv((char **) subsystems) : NULL;
+
+    self->udev = udev_new();
+    if (!self->udev)
+        goto fail;
+
+    /* connect to event source */
+    if (self->event_handler) {
+        self->monitor = udev_monitor_new_from_netlink(self->udev, "udev");
+        if (!self->monitor)
+            goto fail;
+
+        if (self->subsystems) {
+            /* install subsystem filters to only wake up for certain events */
+            for (n = 0; self->subsystems[n]; n++) {
+                gs_free char *to_free = NULL;
+                const char *  subsystem;
+                const char *  devtype;
+
+                _subsystem_split(self->subsystems[n], &subsystem, &devtype, &to_free);
+                udev_monitor_filter_add_match_subsystem_devtype(self->monitor, subsystem, devtype);
+            }
+
+            /* listen to events, and buffer them */
+            udev_monitor_set_receive_buffer_size(self->monitor, 4 * 1024 * 1024);
+            udev_monitor_enable_receiving(self->monitor);
+
+            self->watch_source = nm_g_unix_fd_source_new(udev_monitor_get_fd(self->monitor),
+                                                         G_IO_IN,
+                                                         G_PRIORITY_DEFAULT,
+                                                         monitor_event,
+                                                         self,
+                                                         NULL);
+            g_source_attach(self->watch_source, g_main_context_get_thread_default());
+        }
+    }
+
+    return self;
 
 fail:
-	return nm_udev_client_unref (self);
+    return nm_udev_client_unref(self);
 }
 
 NMUdevClient *
-nm_udev_client_unref (NMUdevClient *self)
+nm_udev_client_unref(NMUdevClient *self)
 {
-	if (!self)
-		return NULL;
+    if (!self)
+        return NULL;
 
-	nm_clear_g_source_inst (&self->watch_source);
+    nm_clear_g_source_inst(&self->watch_source);
 
-	udev_monitor_unref (self->monitor);
-	self->monitor = NULL;
-	udev_unref (self->udev);
-	self->udev = NULL;
+    udev_monitor_unref(self->monitor);
+    self->monitor = NULL;
+    udev_unref(self->udev);
+    self->udev = NULL;
 
-	g_strfreev (self->subsystems);
+    g_strfreev(self->subsystems);
 
-	g_slice_free (NMUdevClient, self);
+    g_slice_free(NMUdevClient, self);
 
-	return NULL;
+    return NULL;
 }