summaryrefslogtreecommitdiffstats
path: root/winsup/cygwin/pipe.cc
diff options
context:
space:
mode:
authorCorinna Vinschen <corinna@vinschen.de>2016-01-11 19:10:45 +0100
committerCorinna Vinschen <corinna@vinschen.de>2016-01-11 19:10:45 +0100
commit27086d628e814b7b73a5c858ff2d9138c22d5543 (patch)
treec79c20bbe37f94021f431aba7829e4077b737370 /winsup/cygwin/pipe.cc
parentb4cf3f454d8c2a05d6956fbc1eae3942d2f1730a (diff)
downloadcygnal-27086d628e814b7b73a5c858ff2d9138c22d5543.tar.gz
cygnal-27086d628e814b7b73a5c858ff2d9138c22d5543.tar.bz2
cygnal-27086d628e814b7b73a5c858ff2d9138c22d5543.zip
Fix previous fix for generating unique inode numbers for sockets
* fhandler.h (fhandler_base::get_plain_ino): New inline method. Add comment to explain what it's supposed to be used for. * fhandler_socket.cc (fhandler_socket::get_proc_fd_name): Create filename using inode number. (fhandler_socket::fstat): Generate inode number from filename if ino is not set (that's the case in a stat(2) call). * pipe.cc: Throughout, use get_plain_ino when appropriate. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
Diffstat (limited to 'winsup/cygwin/pipe.cc')
-rw-r--r--winsup/cygwin/pipe.cc12
1 files changed, 6 insertions, 6 deletions
diff --git a/winsup/cygwin/pipe.cc b/winsup/cygwin/pipe.cc
index 4ec4fa48e..4ccfef69c 100644
--- a/winsup/cygwin/pipe.cc
+++ b/winsup/cygwin/pipe.cc
@@ -142,7 +142,8 @@ fhandler_pipe::open (int flags, mode_t mode)
__seterrno ();
goto out;
}
- init (nio_hdl, fh->get_access (), mode & O_TEXT ?: O_BINARY, fh->get_ino ());
+ init (nio_hdl, fh->get_access (), mode & O_TEXT ?: O_BINARY,
+ fh->get_plain_ino ());
cfree (fh);
CloseHandle (proc);
return 1;
@@ -181,7 +182,7 @@ fhandler_pipe::ftruncate (off_t length, bool allow_truncate)
char *
fhandler_pipe::get_proc_fd_name (char *buf)
{
- __small_sprintf (buf, "pipe:[%D]", get_ino ());
+ __small_sprintf (buf, "pipe:[%D]", get_plain_ino ());
return buf;
}
@@ -422,8 +423,7 @@ fhandler_pipe::fstat (struct stat *buf)
if (!ret)
{
buf->st_dev = FH_PIPE;
- /* Don't use get_ino, it doesn't return 0 but a hash instead. */
- if (!(buf->st_ino = get_unique_id ()))
+ if (!(buf->st_ino = get_plain_ino ()))
sscanf (get_name (), "/proc/%*d/fd/pipe:[%lld]",
(long long *) &buf->st_ino);
}
@@ -447,9 +447,9 @@ pipe_worker (int filedes[2], unsigned int psize, int mode)
cygheap_fdnew fdin;
cygheap_fdnew fdout (fdin, false);
char buf[sizeof ("/dev/fd/pipe:[9223372036854775807]")];
- __small_sprintf (buf, "/dev/fd/pipe:[%D]", fhs[0]->get_ino ());
+ __small_sprintf (buf, "/dev/fd/pipe:[%D]", fhs[0]->get_plain_ino ());
fhs[0]->pc.set_posix (buf);
- __small_sprintf (buf, "pipe:[%D]", fhs[1]->get_ino ());
+ __small_sprintf (buf, "pipe:[%D]", fhs[1]->get_plain_ino ());
fhs[1]->pc.set_posix (buf);
fdin = fhs[0];
fdout = fhs[1];