* net.cc (cygwin_getsockname): Fix handling of NULL sun_path.

This commit is contained in:
Corinna Vinschen 2002-02-07 15:04:32 +00:00
parent 7a149da931
commit 1f64102fa6
2 changed files with 15 additions and 6 deletions

View File

@ -1,3 +1,7 @@
2002-02-07 Corinna Vinschen <corinna@vinschen.de>
* net.cc (cygwin_getsockname): Fix handling of NULL sun_path.
2002-01-29 Corinna Vinschen <corinna@vinschen.de>
* net.cc (getdomainname): Fix registry key for 9x systems, too.

View File

@ -1375,12 +1375,17 @@ cygwin_getsockname (int fd, struct sockaddr *addr, int *namelen)
struct sockaddr_un *sun = (struct sockaddr_un *) addr;
memset (sun, 0, *namelen);
sun->sun_family = AF_LOCAL;
/* According to SUSv2 "If the actual length of the address is greater
than the length of the supplied sockaddr structure, the stored
address will be truncated." We play it save here so that the
path always has a trailing 0 even if it's truncated. */
strncpy (sun->sun_path, sock->get_sun_path (),
*namelen - sizeof *sun + sizeof sun->sun_path - 1);
if (!sock->get_sun_path ())
sun->sun_path[0] = '\0';
else
/* According to SUSv2 "If the actual length of the address is
greater than the length of the supplied sockaddr structure, the
stored address will be truncated." We play it save here so
that the path always has a trailing 0 even if it's truncated. */
strncpy (sun->sun_path, sock->get_sun_path (),
*namelen - sizeof *sun + sizeof sun->sun_path - 1);
*namelen = sizeof *sun - sizeof sun->sun_path
+ strlen (sun->sun_path) + 1;
res = 0;