patch 1754489 by vlahan:

improve portability of address length calculation for AF_UNIX sockets
This commit is contained in:
Armin Rigo 2008-01-23 14:07:13 +00:00
parent 501dbbfb70
commit 964ca4274f
1 changed files with 2 additions and 2 deletions

View File

@ -1001,7 +1001,7 @@ makesockaddr(int sockfd, struct sockaddr *addr, int addrlen, int proto)
struct sockaddr_un *a = (struct sockaddr_un *) addr; struct sockaddr_un *a = (struct sockaddr_un *) addr;
#ifdef linux #ifdef linux
if (a->sun_path[0] == 0) { /* Linux abstract namespace */ if (a->sun_path[0] == 0) { /* Linux abstract namespace */
addrlen -= (sizeof(*a) - sizeof(a->sun_path)); addrlen -= offsetof(struct sockaddr_un, sun_path);
return PyString_FromStringAndSize(a->sun_path, return PyString_FromStringAndSize(a->sun_path,
addrlen); addrlen);
} }
@ -1207,7 +1207,7 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args,
#if defined(PYOS_OS2) #if defined(PYOS_OS2)
*len_ret = sizeof(*addr); *len_ret = sizeof(*addr);
#else #else
*len_ret = len + sizeof(*addr) - sizeof(addr->sun_path); *len_ret = len + offsetof(struct sockaddr_un, sun_path);
#endif #endif
return 1; return 1;
} }