When compiling with -Waggregate-return, gcc issues the following warning:
net.c: In function 'extract_v4_addr':
net.c:682: warning: function returns an aggregate
acl.c: In function 'acl_check_access':
acl.c:60: warning: function call has aggregate value
It's not entirely clear how bad it is these days to return a structure, but
extract_v4_addr() is the only function in the tree which does it. Since it
can be easily changed to take a pointer instead and there is only a single
caller, let's implement it this way.
PARA_ERROR_LOG("Can not determine peer address: %s\n", strerror(errno));
goto no_match;
}
PARA_ERROR_LOG("Can not determine peer address: %s\n", strerror(errno));
goto no_match;
}
- v4_addr = extract_v4_addr(&ss);
+ extract_v4_addr(&ss, &v4_addr);
if (!v4_addr.s_addr)
goto no_match;
if (!v4_addr.s_addr)
goto no_match;
/**
* Extract IPv4 or IPv6-mapped-IPv4 address from sockaddr_storage.
/**
* Extract IPv4 or IPv6-mapped-IPv4 address from sockaddr_storage.
- * \param ss Container of IPv4/6 address
- * \return Extracted IPv4 address (different from 0) or 0 if unsuccessful.
+ * \param ss Container of IPv4/6 address.
+ * \param ia Extracted IPv4 address (different from 0) or 0 if unsuccessful.
+ *
+ * \sa RFC 3493.
-struct in_addr extract_v4_addr(const struct sockaddr_storage *ss)
+void extract_v4_addr(const struct sockaddr_storage *ss, struct in_addr *ia)
- struct in_addr ia = {.s_addr = 0};
const struct sockaddr *sa = normalize_ip_address(ss);
const struct sockaddr *sa = normalize_ip_address(ss);
+ memset(ia, 0, sizeof(*ia));
if (sa->sa_family == AF_INET)
if (sa->sa_family == AF_INET)
- ia = ((struct sockaddr_in *)sa)->sin_addr;
- return ia;
+ *ia = ((struct sockaddr_in *)sa)->sin_addr;
return makesock(l4type, 0, host, port, NULL);
}
return makesock(l4type, 0, host, port, NULL);
}
-extern struct in_addr extract_v4_addr(const struct sockaddr_storage *ss);
+void extract_v4_addr(const struct sockaddr_storage *ss, struct in_addr *ia);
/**
* Functions to support listening sockets.
/**
* Functions to support listening sockets.