summaryrefslogtreecommitdiffstats
path: root/winsup/cygwin/fhandler_socket.cc
diff options
context:
space:
mode:
Diffstat (limited to 'winsup/cygwin/fhandler_socket.cc')
-rw-r--r--winsup/cygwin/fhandler_socket.cc17
1 files changed, 6 insertions, 11 deletions
diff --git a/winsup/cygwin/fhandler_socket.cc b/winsup/cygwin/fhandler_socket.cc
index b10e28a8c..aa18320e5 100644
--- a/winsup/cygwin/fhandler_socket.cc
+++ b/winsup/cygwin/fhandler_socket.cc
@@ -95,7 +95,7 @@ get_inet_addr (const struct sockaddr *in, int inlen,
/* fhandler_socket */
fhandler_socket::fhandler_socket (int nunit)
- : fhandler_base (FH_SOCKET), unit (nunit), sun_path (NULL)
+ : fhandler_base (FH_SOCKET), sun_path (NULL), unit (nunit)
{
set_need_fork_fixup ();
prot_info_ptr = (LPWSAPROTOCOL_INFOA) cmalloc (HEAP_BUF,
@@ -310,7 +310,7 @@ int __stdcall
fhandler_socket::fstat (struct __stat64 *buf, path_conv *pc)
{
int res;
- if (get_addr_family () == AF_LOCAL && get_sun_path ())
+ if (get_addr_family () == AF_LOCAL && get_sun_path () && !get_socket_type ())
{
path_conv spc (get_sun_path (),
PC_SYM_NOFOLLOW | PC_NULLEMPTY | PC_FULL | PC_POSIX,
@@ -321,13 +321,6 @@ fhandler_socket::fstat (struct __stat64 *buf, path_conv *pc)
if (fh)
{
res = fh->fstat (buf, &spc);
- /* Faking Linux like values on top of the file specific values. */
- if (get_socket_type ()) /* fstat() */
- {
- buf->st_dev = 0;
- buf->st_mode |= S_IRWXU | S_IRWXG | S_IRWXO;
- buf->st_ino = (ino_t) get_handle ();
- }
buf->st_rdev = buf->st_size = buf->st_blocks = 0;
return res;
}
@@ -338,9 +331,11 @@ fhandler_socket::fstat (struct __stat64 *buf, path_conv *pc)
{
if (get_socket_type ()) /* fstat */
{
+ buf->st_dev = 0;
buf->st_ino = (ino_t) get_handle ();
- buf->st_mode &= ~S_IFMT;
- buf->st_mode |= S_IFSOCK;
+ buf->st_mode = S_IFSOCK | S_IRWXU | S_IRWXG | S_IRWXO;
+ buf->st_uid = geteuid32 ();
+ buf->st_gid = getegid32 ();
}
else
{