From: Lennart Poettering Date: Tue, 26 Dec 2017 12:35:52 +0000 (+0100) Subject: socket-util: clarify why sockaddr_port returns unsigned rather than uint16_t X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=3aee620d4cc4ce7466439f3b46a2aed4b2f2055b;p=elogind.git socket-util: clarify why sockaddr_port returns unsigned rather than uint16_t --- diff --git a/src/basic/socket-util.c b/src/basic/socket-util.c index 96c390ccc..ce14b038a 100644 --- a/src/basic/socket-util.c +++ b/src/basic/socket-util.c @@ -541,21 +541,28 @@ bool socket_address_matches_fd(const SocketAddress *a, int fd) { } int sockaddr_port(const struct sockaddr *_sa, unsigned *port) { +int sockaddr_port(const struct sockaddr *_sa, unsigned *ret_port) { union sockaddr_union *sa = (union sockaddr_union*) _sa; + /* Note, this returns the port as 'unsigned' rather than 'uint16_t', as AF_VSOCK knows larger ports */ + assert(sa); switch (sa->sa.sa_family) { + case AF_INET: *port = be16toh(sa->in.sin_port); + *ret_port = be16toh(sa->in.sin_port); return 0; case AF_INET6: *port = be16toh(sa->in6.sin6_port); + *ret_port = be16toh(sa->in6.sin6_port); return 0; case AF_VSOCK: *port = sa->vm.svm_port; + *ret_port = sa->vm.svm_port; return 0; default: