diff options
author | Corinna Vinschen <corinna@vinschen.de> | 2019-01-05 21:41:01 +0100 |
---|---|---|
committer | Corinna Vinschen <corinna@vinschen.de> | 2019-01-05 21:41:01 +0100 |
commit | a3a5d52b398887a5ee1ca75b23915d17a60ac10a (patch) | |
tree | 53356f178f5b1e82a4c6a56e264888926ae09fd0 | |
parent | f72191ac0177883bb395d8d5f0ddc3f45b5dd29d (diff) | |
download | cygnal-a3a5d52b398887a5ee1ca75b23915d17a60ac10a.tar.gz cygnal-a3a5d52b398887a5ee1ca75b23915d17a60ac10a.tar.bz2 cygnal-a3a5d52b398887a5ee1ca75b23915d17a60ac10a.zip |
Cygwin: introduce virt_fdsymlink to simplify /proc/PID/fd symlink handling
Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
-rw-r--r-- | winsup/cygwin/fhandler.h | 1 | ||||
-rw-r--r-- | winsup/cygwin/fhandler_process.cc | 3 | ||||
-rw-r--r-- | winsup/cygwin/path.cc | 4 |
3 files changed, 6 insertions, 2 deletions
diff --git a/winsup/cygwin/fhandler.h b/winsup/cygwin/fhandler.h index 07e8a1834..0ead0d90c 100644 --- a/winsup/cygwin/fhandler.h +++ b/winsup/cygwin/fhandler.h @@ -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 */ diff --git a/winsup/cygwin/fhandler_process.cc b/winsup/cygwin/fhandler_process.cc index b0fae4cce..24ef7d00c 100644 --- a/winsup/cygwin/fhandler_process.cc +++ b/winsup/cygwin/fhandler_process.cc @@ -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) diff --git a/winsup/cygwin/path.cc b/winsup/cygwin/path.cc index 3324395cb..563ba0e80 100644 --- a/winsup/cygwin/path.cc +++ b/winsup/cygwin/path.cc @@ -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: |