summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--winsup/cygwin/fhandler.h14
-rw-r--r--winsup/cygwin/fhandler_socket_unix.cc17
2 files changed, 19 insertions, 12 deletions
diff --git a/winsup/cygwin/fhandler.h b/winsup/cygwin/fhandler.h
index e9a247256..da600f2dc 100644
--- a/winsup/cygwin/fhandler.h
+++ b/winsup/cygwin/fhandler.h
@@ -842,18 +842,8 @@ class sun_name_t
/* Allows 108 bytes sun_path plus trailing NUL */
char _nul[sizeof (struct sockaddr_un) + 1];
};
- sun_name_t ()
- {
- un_len = 0;
- un.sun_family = 0;
- _nul[sizeof (struct sockaddr_un)] = '\0';
- }
- sun_name_t (const struct sockaddr *name, __socklen_t namelen)
- {
- un_len = namelen < (__socklen_t) sizeof un ? namelen : sizeof un;
- memcpy (&un, name, un_len);
- _nul[sizeof (struct sockaddr_un)] = '\0';
- }
+ sun_name_t ();
+ sun_name_t (const struct sockaddr *name, __socklen_t namelen);
void *operator new (size_t) __attribute__ ((nothrow))
{ return cmalloc_abort (HEAP_FHANDLER, sizeof (sun_name_t)); }
diff --git a/winsup/cygwin/fhandler_socket_unix.cc b/winsup/cygwin/fhandler_socket_unix.cc
index 36a3cb3c4..f93b91221 100644
--- a/winsup/cygwin/fhandler_socket_unix.cc
+++ b/winsup/cygwin/fhandler_socket_unix.cc
@@ -69,6 +69,23 @@ GUID __cygwin_socket_guid = {
.Data4 = { 0xba, 0xb3, 0xc5, 0xb1, 0xf9, 0x2c, 0xb8, 0x8c }
};
+sun_name_t::sun_name_t ()
+{
+ un_len = sizeof (sa_family_t);
+ un.sun_family = AF_UNIX;
+ _nul[sizeof (struct sockaddr_un)] = '\0';
+}
+
+sun_name_t::sun_name_t (const struct sockaddr *name, socklen_t namelen)
+{
+ if (namelen < 0)
+ namelen = 0;
+ un_len = namelen < (__socklen_t) sizeof un ? namelen : sizeof un;
+ if (name)
+ memcpy (&un, name, un_len);
+ _nul[sizeof (struct sockaddr_un)] = '\0';
+}
+
HANDLE
fhandler_socket_unix::create_abstract_link (const sun_name_t *sun,
PUNICODE_STRING pipe_name)