Mercurial > hg > dhcpcd
changeset 4516:a519e4e62efd draft
sa: Add sa_len() to calculate sockaddr length for non BSD
| author | Roy Marples <roy@marples.name> |
|---|---|
| date | Sun, 05 May 2019 12:45:29 +0100 |
| parents | 768ba28719eb |
| children | ae3b0ea6c309 |
| files | src/sa.c src/sa.h |
| diffstat | 2 files changed, 29 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/src/sa.c Sat May 04 19:38:44 2019 +0100 +++ b/src/sa.c Sun May 05 12:45:29 2019 +0100 @@ -93,6 +93,30 @@ } } +#ifndef HAVE_SA_LEN +static int +sa_len(const struct sockaddr *sa) +{ + + switch (sa->sa_family) { +#ifdef AF_LINK + case AF_LINK: + return sizeof(struct sockaddr_dl); +#endif +#ifdef AF_PACKET + case AF_PACKET: + return sizeof(struct sockaddr_ll); +#endif + case AF_INET: + return sizeof(struct sockaddr_in); + case AF_INET6: + return sizeof(struct sockaddr_in6); + default: + return sizeof(struct sockaddr); + } +} +#endif + bool sa_is_unspecified(const struct sockaddr *sa) {
--- a/src/sa.h Sat May 04 19:38:44 2019 +0100 +++ b/src/sa.h Sun May 05 12:45:29 2019 +0100 @@ -55,6 +55,11 @@ socklen_t sa_addroffset(const struct sockaddr *sa); socklen_t sa_addrlen(const struct sockaddr *sa); +#ifdef HAVE_SA_LEN +#define sa_len(sa) ((sa)->sa_len) +#else +socklen_t sa_len(const struct sockaddr *sa); +#endif bool sa_is_unspecified(const struct sockaddr *); bool sa_is_allones(const struct sockaddr *); bool sa_is_loopback(const struct sockaddr *);
