From 3aee620d4cc4ce7466439f3b46a2aed4b2f2055b Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Tue, 26 Dec 2017 13:35:52 +0100 Subject: [PATCH] socket-util: clarify why sockaddr_port returns unsigned rather than uint16_t --- src/basic/socket-util.c | 7 +++++++ 1 file changed, 7 insertions(+) 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: -- 2.30.2