X-Git-Url: http://git.archive.openwrt.org/?a=blobdiff_plain;f=alias.c;h=e4bb700fb216f61ae81b4f76a630749c11ef1de4;hb=6fd6be6b7f3fc4883fdc464fcbcb2b5e8d8e8174;hp=cef125f578d4e6da125138180e28e9309772cd42;hpb=f35b76c61baf68dc5dd8440fc06d860f8dfacc44;p=project%2Fnetifd.git diff --git a/alias.c b/alias.c index cef125f..e4bb700 100644 --- a/alias.c +++ b/alias.c @@ -34,8 +34,15 @@ static const struct device_type alias_device_type; static void alias_set_device(struct alias_device *alias, struct device *dev) { - if (dev == alias->dep.dev) + if (dev == alias->dep.dev) { + if (alias->update) { + device_remove_user(&alias->new_dep); + alias->update = false; + if (dev) + device_set_present(&alias->dev, true); + } return; + } device_set_present(&alias->dev, false); device_remove_user(&alias->new_dep); @@ -112,6 +119,9 @@ alias_device_create(const char *name, struct blob_attr *attr) struct alias_device *alias; alias = calloc(1, sizeof(*alias) + strlen(name) + 1); + if (!alias) + return NULL; + strcpy(alias->name, name); alias->dev.set_state = alias_device_set_state; alias->dev.hidden = true; @@ -130,6 +140,8 @@ static void alias_device_free(struct device *dev) struct alias_device *alias; alias = container_of(dev, struct alias_device, dev); + device_remove_user(&alias->new_dep); + device_remove_user(&alias->dep); avl_delete(&aliases, &alias->avl); free(alias); }