From 5483940df7a35d052d195a2fa1db29763f795ad0 Mon Sep 17 00:00:00 2001 From: Felix Fietkau Date: Sun, 27 Mar 2011 18:40:01 +0200 Subject: add a function for adding a virtual device (not tracked in the avl tree) --- device.c | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) (limited to 'device.c') 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) -- cgit v1.2.3