Cygwin: proc fd: fix handling of pipes, sockets, etc
The symlink target of /proc/PID/fd files pointing to pipes and sockets are just artificial filenames referencing the object using some internal number. The pipe open code expects a path specifying process pid and the internal number so it access the right process and pipe. - Set the posix path of the pipe to the simple pipe name only, as it shows up in /proc/PID/fd. A /proc/self prefix is just as wrong as a /dev/fd prefix. - Revert thinko in fhandler_pipe::open expecting the name as /proc/self/fd/... In fact this should never happen. - Fix up the path before re-opening the pipe instead. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
This commit is contained in:
@ -73,11 +73,8 @@ fhandler_pipe::open (int flags, mode_t mode)
|
||||
bool inh;
|
||||
bool got_one = false;
|
||||
|
||||
if (sscanf (get_name (), "/proc/self/fd/pipe:[%llu]",
|
||||
(long long *) &uniq_id) == 1)
|
||||
pid = myself->pid;
|
||||
else if (sscanf (get_name (), "/proc/%d/fd/pipe:[%llu]",
|
||||
&pid, (long long *) &uniq_id) < 2)
|
||||
if (sscanf (get_name (), "/proc/%d/fd/pipe:[%llu]",
|
||||
&pid, (long long *) &uniq_id) < 2)
|
||||
{
|
||||
set_errno (ENOENT);
|
||||
return 0;
|
||||
|
Reference in New Issue
Block a user