X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fnetwork%2Fnetworkd-manager.c;h=8a0ed5ea2b4f38966cd07562eaa8c6bf4636a40a;hb=c2d6bd61ee77b59566116afe6e20513d19945ed4;hp=46b803fee5d82a907e8bf2c9c85e9cfde44ee694;hpb=186fe1db20902b6542cee58ba499ced914d687a8;p=elogind.git diff --git a/src/network/networkd-manager.c b/src/network/networkd-manager.c index 46b803fee..8a0ed5ea2 100644 --- a/src/network/networkd-manager.c +++ b/src/network/networkd-manager.c @@ -25,6 +25,7 @@ #include "conf-parser.h" #include "path-util.h" #include "networkd.h" +#include "networkd-netdev.h" #include "network-internal.h" #include "libudev-private.h" #include "udev-util.h" @@ -113,10 +114,6 @@ int manager_new(Manager **ret) { return -ENOMEM; } - m->links = hashmap_new(uint64_hash_func, uint64_compare_func); - if (!m->links) - return -ENOMEM; - m->netdevs = hashmap_new(string_hash_func, string_compare_func); if (!m->netdevs) return -ENOMEM; @@ -226,7 +223,7 @@ static int manager_rtnl_process_link(sd_rtnl *rtnl, sd_rtnl_message *message, vo Link *link = NULL; NetDev *netdev = NULL; uint16_t type; - char *name; + const char *name; int r, ifindex; assert(rtnl); @@ -443,7 +440,7 @@ int manager_save(Manager *m) { r = fopen_temporary(m->state_file, &f, &temp_path); if (r < 0) - goto finish; + return r; fchmod(fileno(f), 0644); @@ -451,22 +448,25 @@ int manager_save(Manager *m) { "# This is private data. Do not parse.\n" "OPER_STATE=%s\n", operstate_str); - fflush(f); + r = fflush_and_check(f); + if (r < 0) + goto fail; - if (ferror(f) || rename(temp_path, m->state_file) < 0) { + if (rename(temp_path, m->state_file) < 0) { r = -errno; - unlink(m->state_file); - unlink(temp_path); + goto fail; } -finish: - if (r < 0) - log_error("Failed to save network state to %s: %s", m->state_file, strerror(-r)); + return 0; +fail: + log_error("Failed to save network state to %s: %s", m->state_file, strerror(-r)); + unlink(m->state_file); + unlink(temp_path); return r; } -int manager_address_pool_acquire(Manager *m, unsigned family, unsigned prefixlen, union in_addr_union *found) { +int manager_address_pool_acquire(Manager *m, int family, unsigned prefixlen, union in_addr_union *found) { AddressPool *p; int r;