diff options
author | Corinna Vinschen <corinna@vinschen.de> | 2016-01-11 12:35:41 +0100 |
---|---|---|
committer | Corinna Vinschen <corinna@vinschen.de> | 2016-01-11 12:35:41 +0100 |
commit | a10d96923188977446ebd84323b47f7085fb5cb4 (patch) | |
tree | 93f0d80084bd2b86e83f98e2d96cbed00045fafb /winsup/cygwin/fhandler.h | |
parent | 20ddde2f552afedf7ef662bb21fec7a56f50040f (diff) | |
download | cygnal-a10d96923188977446ebd84323b47f7085fb5cb4.tar.gz cygnal-a10d96923188977446ebd84323b47f7085fb5cb4.tar.bz2 cygnal-a10d96923188977446ebd84323b47f7085fb5cb4.zip |
Return unique inode numbers when calling stat/fstat on pipes and IP sockets
* fhandler.h (class fhandler_base): Convert unique_id to int64_t.
(fhandler_base::set_ino): New protected inline method.
(fhandler_base::get_unique_id): Convert to int64_t.
(fhandler_base::set_unique_id): New inline method taking int64_t.
(fhandler_pipe::fstat): Declare.
(fhandler_pipe::init): Take extra parameter.
(fhandler_pipe::create): Ditto.
* fhandler_socket.cc (fhandler_socket::init_events): Set inode number
to serial number.
(fhandler_socket::fstat): Set device to DEV_TCP_MAJOR. Create st_ino
from get_ino.
* include/cygwin/signal.h (struct _sigcommune): Replace
_si_pipe_fhandler with _si_pipe_unique_id.
* pinfo.h (_pinfo::pipe_fhandler): Take unique id instead of HANDLE.
* pinfo.cc (commune_process): Accommodate change to _si_pipe_unique_id.
(_pinfo::commune_request): Ditto.
(_pinfo::pipe_fhandler): Ditto.
* pipe.cc (fhandler_pipe::init): Take unique id as argument and set
inode number and unique_id from there.
(fhandler_pipe::open): Rework to find any matching pipe from unique
id in filename.
(fhandler_pipe::get_proc_fd_name): Create filename using inode number.
(fhandler_pipe::create): Generate and return unique id from process pid
and pipe_unique_id. In outer method, call init with additional unique
id as parameter.
(fhandler_pipe::fstat): New method.
(pipe_worker): Accommodate using 64 bit inode number in filename.
Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
Diffstat (limited to 'winsup/cygwin/fhandler.h')
-rw-r--r-- | winsup/cygwin/fhandler.h | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/winsup/cygwin/fhandler.h b/winsup/cygwin/fhandler.h index adb84414e..8bcf83f0e 100644 --- a/winsup/cygwin/fhandler.h +++ b/winsup/cygwin/fhandler.h @@ -182,8 +182,9 @@ class fhandler_base size_t rabuflen; /* Used for advisory file locking. See flock.cc. */ - long long unique_id; + int64_t unique_id; void del_my_locks (del_lock_called_from); + void set_ino (ino_t i) { ino = i; } HANDLE read_state; @@ -304,7 +305,7 @@ class fhandler_base const char *get_win32_name () { return pc.get_win32 (); } virtual dev_t get_dev () { return get_device (); } ino_t get_ino () { return ino ?: ino = hash_path_name (0, pc.get_nt_native_path ()); } - long long get_unique_id () const { return unique_id; } + int64_t get_unique_id () const { return unique_id; } /* Returns name used for /proc/<pid>/fd in buf. */ virtual char *get_proc_fd_name (char *buf); @@ -319,6 +320,7 @@ class fhandler_base int open_null (int flags); virtual int open (int, mode_t); virtual void open_setup (int flags); + void set_unique_id (int64_t u) { unique_id = u; } void set_unique_id () { NtAllocateLocallyUniqueId ((PLUID) &unique_id); } int close_with_arch (); @@ -731,13 +733,14 @@ public: int open (int flags, mode_t mode = 0); int dup (fhandler_base *child, int); int ioctl (unsigned int cmd, void *); + int __reg2 fstat (struct stat *buf); int __reg2 fstatvfs (struct statvfs *buf); int __reg3 fadvise (off_t, off_t, int); int __reg3 ftruncate (off_t, bool); - int init (HANDLE, DWORD, mode_t); + int init (HANDLE, DWORD, mode_t, int64_t); static int create (fhandler_pipe *[2], unsigned, int); static DWORD create (LPSECURITY_ATTRIBUTES, HANDLE *, HANDLE *, DWORD, - const char *, DWORD); + const char *, DWORD, int64_t *unique_id = NULL); fhandler_pipe (void *) {} void copyto (fhandler_base *x) |