X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=socket-util.c;h=1024ecbed3d2701878118ab8b9dc1c3c74a367a6;hp=525c33474dde444ed551d5a59ec01ba9451ff7ca;hb=83c60c9f0c7581b607dc5c0f84582978894e3d4a;hpb=542563babda739f7aee468c3eaaab6315ffa4224 diff --git a/socket-util.c b/socket-util.c index 525c33474..1024ecbed 100644 --- a/socket-util.c +++ b/socket-util.c @@ -115,13 +115,13 @@ int socket_address_parse(SocketAddress *a, const char *s) { idx = if_nametoindex(n); free(n); - if (n == 0) + if (idx == 0) return -EINVAL; a->sockaddr.in6.sin6_family = AF_INET6; a->sockaddr.in6.sin6_port = htons((uint16_t) u); a->sockaddr.in6.sin6_scope_id = idx; - memcpy(&a->sockaddr.in6.sin6_addr, &in6addr_any, INET6_ADDRSTRLEN); + a->sockaddr.in6.sin6_addr = in6addr_any; a->size = sizeof(struct sockaddr_in6); } } else { @@ -135,7 +135,7 @@ int socket_address_parse(SocketAddress *a, const char *s) { a->sockaddr.in6.sin6_family = AF_INET6; a->sockaddr.in6.sin6_port = htons((uint16_t) u); - memcpy(&a->sockaddr.in6.sin6_addr, &in6addr_any, INET6_ADDRSTRLEN); + a->sockaddr.in6.sin6_addr = in6addr_any; a->size = sizeof(struct sockaddr_in6); } } @@ -274,9 +274,10 @@ int socket_address_print(const SocketAddress *a, char **p) { } } -int socket_address_listen(const SocketAddress *a, int backlog, SocketAddressBindIPv6Only only) { +int socket_address_listen(const SocketAddress *a, int backlog, SocketAddressBindIPv6Only only, int *ret) { int r, fd; assert(a); + assert(ret); if ((r = socket_address_verify(a)) < 0) return r; @@ -304,5 +305,6 @@ int socket_address_listen(const SocketAddress *a, int backlog, SocketAddressBind return -errno; } + *ret = fd; return 0; }