X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fnetwork%2Fnetworkd-link.c;h=bc8ca21c82afd97ec12f27c06a753a9ee8da1562;hb=aa3437a573ed2a2b2a03c9649fe11d27b40a772b;hp=889efc8c2f060a968bff74aebaae4623ffe7a209;hpb=2672953bde548f3648eb6a24dbda415604262cea;p=elogind.git diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c index 889efc8c2..bc8ca21c8 100644 --- a/src/network/networkd-link.c +++ b/src/network/networkd-link.c @@ -89,7 +89,7 @@ void link_free(Link *link) { free(link); } -int link_add(Manager *m, struct udev_device *device) { +int link_add(Manager *m, struct udev_device *device, Link **ret) { Link *link; Network *network; int r; @@ -101,18 +101,22 @@ int link_add(Manager *m, struct udev_device *device) { ifindex = udev_device_get_ifindex(device); link = hashmap_get(m->links, &ifindex); - if (link) + if (link) { + *ret = link; return -EEXIST; + } r = link_new(m, device, &link); if (r < 0) return r; + *ret = link; + devtype = udev_device_get_devtype(device); if (streq_ptr(devtype, "bridge")) { r = bridge_set_link(m, link); - if (r < 0) - return r == -ENOENT ? 0 : r; + if (r < 0 && r != -ENOENT) + return r; } r = network_get(m, device, &network);