From 6326a423e7d3df2062bf29a4e9710aeecac89411 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Sat, 10 Apr 2010 17:45:14 +0200 Subject: [PATCH] device: ignore a couple of 'API' devices --- device.c | 24 +++++++++++++++++++++++- device.h | 4 ++-- 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/device.c b/device.c index 500cd23e2..39375a425 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 30b8915c1..b9ca22d19 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; }; -- 2.30.2