Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'winsup/cygwin/tty.h')
-rw-r--r--winsup/cygwin/tty.h31
1 files changed, 27 insertions, 4 deletions
diff --git a/winsup/cygwin/tty.h b/winsup/cygwin/tty.h
index b05ed9780..f7a80e10f 100644
--- a/winsup/cygwin/tty.h
+++ b/winsup/cygwin/tty.h
@@ -69,9 +69,9 @@ public:
int ioctl_retval;
int write_error;
- void setntty (_major_t t, int n) {ntty = (fh_devices) FHDEV (t, n);}
- int getntty () const {return ntty;}
- int get_unit () const {return device::minor (ntty);}
+ void setntty (_major_t t, _minor_t n) {ntty = (fh_devices) FHDEV (t, n);}
+ dev_t getntty () const {return ntty;}
+ _minor_t get_minor () const {return device::minor (ntty);}
pid_t getpgid () const {return pgid;}
void setpgid (int pid) {pgid = pid;}
int getsid () const {return sid;}
@@ -90,7 +90,30 @@ class tty: public tty_min
public:
pid_t master_pid; /* PID of tty master process */
- HANDLE from_master, to_master;
+private:
+ /* Since tty is shared, the HANDLEs must be 32 and 64 bit clean. The below
+ code makes sure of that by setting the upper 4 byte of the union to 0
+ when writing the handle value from a 32 bit process. Fortunately the
+ actual values are 32 bit on both platforms, so the HANDLES can be
+ used on both platforms. */
+ union {
+ HANDLE _from_master;
+ LARGE_INTEGER _fm_dummy;
+ };
+ union {
+ HANDLE _to_master;
+ LARGE_INTEGER _tm_dummy;
+ };
+public:
+ HANDLE from_master() const { return _from_master; }
+ HANDLE to_master() const { return _to_master; }
+#ifdef __x86_64__
+ void set_from_master (HANDLE h) { _from_master = h; }
+ void set_to_master (HANDLE h) { _to_master = h; }
+#else
+ void set_from_master (HANDLE h) { _fm_dummy.HighPart = 0; _from_master = h; }
+ void set_to_master (HANDLE h) { _tm_dummy.HighPart = 0; _to_master = h; }
+#endif
int read_retval;
bool was_opened; /* True if opened at least once. */