Cygwin: introduce virt_fdsymlink to simplify /proc/PID/fd symlink handling
Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
This commit is contained in:
parent
f72191ac01
commit
a3a5d52b39
|
@ -126,6 +126,7 @@ enum del_lock_called_from {
|
|||
};
|
||||
|
||||
enum virtual_ftype_t {
|
||||
virt_fdsymlink = -8, /* Fd symlink (e.g. /proc/<PID>/fd/0) */
|
||||
virt_blk = -7, /* Block special */
|
||||
virt_chr = -6, /* Character special */
|
||||
virt_fsfile = -5, /* FS-based file via /proc/sys */
|
||||
|
|
|
@ -175,6 +175,7 @@ fhandler_process::fstat (struct stat *buf)
|
|||
buf->st_nlink = 3;
|
||||
return 0;
|
||||
case virt_symlink:
|
||||
case virt_fdsymlink:
|
||||
buf->st_uid = p->uid;
|
||||
buf->st_gid = p->gid;
|
||||
buf->st_mode = S_IFLNK | S_IRWXU | S_IRWXG | S_IRWXO;
|
||||
|
@ -397,7 +398,7 @@ format_process_fd (void *data, char *&destbuf)
|
|||
return 0;
|
||||
}
|
||||
if (*e == '\0')
|
||||
*((process_fd_t *) data)->fd_type = virt_symlink;
|
||||
*((process_fd_t *) data)->fd_type = virt_fdsymlink;
|
||||
else /* trailing path */
|
||||
{
|
||||
char *newbuf = (char *) cmalloc_abort (HEAP_STR, strlen (destbuf)
|
||||
|
|
|
@ -801,7 +801,8 @@ path_conv::check (const char *src, unsigned opt,
|
|||
else
|
||||
{
|
||||
file_type = fh->exists ();
|
||||
if (file_type == virt_symlink)
|
||||
if (file_type == virt_symlink
|
||||
|| file_type == virt_fdsymlink)
|
||||
{
|
||||
fh->fill_filebuf ();
|
||||
symlen = sym.set (fh->get_filebuf ());
|
||||
|
@ -842,6 +843,7 @@ path_conv::check (const char *src, unsigned opt,
|
|||
if (component == 0)
|
||||
fileattr = 0;
|
||||
break;
|
||||
case virt_fdsymlink:
|
||||
case virt_symlink:
|
||||
goto is_virtual_symlink;
|
||||
case virt_pipe:
|
||||
|
|
Loading…
Reference in New Issue