From: Lennart Poettering Date: Sat, 10 Apr 2010 15:45:14 +0000 (+0200) Subject: device: ignore a couple of 'API' devices X-Git-Tag: 0.git+20100605+dfd8ee-1~167 X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6326a423e7d3df2062bf29a4e9710aeecac89411;p=systemd device: ignore a couple of 'API' devices --- diff --git a/device.c b/device.c index 500cd23e..39375a42 100644 --- a/device.c +++ b/device.c @@ -137,6 +137,28 @@ static int device_find_escape_name(Manager *m, const char *dn, Unit **_u) { return 0; } +static bool devnode_is_api(const char *node) { + unsigned i; + + static const char * const table[] = { + "/dev/null", + "/dev/zero", + "/dev/urandom", + "/dev/random", + "/dev/port", + "/dev/oldmem", + "/dev/full", + "/dev/kmsg", + "/dev/mem" + }; + + for (i = 0; i < ELEMENTSOF(table); i++) + if (streq(table[i], node)) + return true; + + return false; +} + static int device_process_new_device(Manager *m, struct udev_device *dev, bool update_state) { const char *dn, *names, *wants, *sysfs, *expose, *model; Unit *u = NULL; @@ -168,7 +190,7 @@ static int device_process_new_device(Manager *m, struct udev_device *dev, bool u if (!b) return 0; } else - if (!dn && !names && !wants) + if ((!dn || devnode_is_api(dn)) && !names && !wants) return 0; /* Ok, seems kinda interesting. Now, let's see if this one diff --git a/device.h b/device.h index 30b8915c..b9ca22d1 100644 --- a/device.h +++ b/device.h @@ -31,7 +31,8 @@ typedef struct Device Device; typedef enum DeviceState { DEVICE_DEAD, DEVICE_AVAILABLE, - _DEVICE_STATE_MAX + _DEVICE_STATE_MAX, + _DEVICE_STATE_INVALID = -1 } DeviceState; struct Device { @@ -39,7 +40,6 @@ struct Device { DeviceState state; - /* A single device can be created by multiple sysfs objects */ char *sysfs; };