From 5483940df7a35d052d195a2fa1db29763f795ad0 Mon Sep 17 00:00:00 2001 From: Felix Fietkau Date: Sun, 27 Mar 2011 18:40:01 +0200 Subject: [PATCH 1/1] add a function for adding a virtual device (not tracked in the avl tree) --- device.c | 26 +++++++++++++++++--------- device.h | 1 + 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/device.c b/device.c index e1ffba1..f9cb058 100644 --- a/device.c +++ b/device.c @@ -85,29 +85,36 @@ int check_device_state(struct device *dev) return dev->type->check_state(dev); } -int init_device(struct device *dev, const struct device_type *type, const char *ifname) +void init_virtual_device(struct device *dev, const struct device_type *type, const char *name) { - int ret; - assert(dev); assert(type); - if (ifname) - strncpy(dev->ifname, ifname, IFNAMSIZ); + fprintf(stderr, "Initialize interface '%s'\n", dev->ifname); + INIT_LIST_HEAD(&dev->users); + dev->type = type; + + if (name) + strncpy(dev->ifname, name, IFNAMSIZ); +} + +int init_device(struct device *dev, const struct device_type *type, const char *ifname) +{ + int ret; + + init_virtual_device(dev, type, ifname); if (!dev->set_state) dev->set_state = set_device_state; - fprintf(stderr, "Initialize interface '%s'\n", dev->ifname); - INIT_LIST_HEAD(&dev->users); dev->avl.key = dev->ifname; - dev->type = type; ret = avl_insert(&devices, &dev->avl); if (ret < 0) return ret; check_device_state(dev); + return 0; } @@ -149,7 +156,8 @@ void cleanup_device(struct device *dev) dep->cb(dep, DEV_EVENT_REMOVE); } - avl_delete(&devices, &dev->avl); + if (dev->avl.key) + avl_delete(&devices, &dev->avl); } void set_device_present(struct device *dev, bool state) diff --git a/device.h b/device.h index 9e7d309..bf93ebc 100644 --- a/device.h +++ b/device.h @@ -79,6 +79,7 @@ struct device_hotplug_ops { int (*del)(struct device *main, struct device *member); }; +void init_virtual_device(struct device *dev, const struct device_type *type, const char *name); int init_device(struct device *iface, const struct device_type *type, const char *ifname); void cleanup_device(struct device *iface); struct device *get_device(const char *name, bool create); -- 2.11.0