* fhandler.h (fhandler_base::status): Declare private.
(fhandler_base::open_status): Ditto. (class fhandler_socket): Move status bits into private bitfield struct type status_flags. Change accessor methods appropriately. * fhandler_socket.cc (fhandler_socket::fhandler_socket): Accomodate above status bit changes. * tty.h: Remove status bit enumerator. (TTYISSETF): Remove. (TTYSETF): Remove. (TTYCLEARF): Remove. (TTYCONDSETF): Remove. (tty_min::status): Define as private bitfield struct type status_flags. Add appropriate accessor methods. * fhandler_console.cc: Use tty_min::status accessor methods throughout. * fhandler_termios.cc: Ditto. * winsup.h (__ISSETF): Remove. (__SETF): Remove. (__CLEARF): Remove. (__CONDSETF): Remove.
This commit is contained in:
		| @@ -1,3 +1,25 @@ | |||||||
|  | 2004-04-09  Corinna Vinschen  <corinna@vinschen.de> | ||||||
|  |  | ||||||
|  | 	* fhandler.h (fhandler_base::status): Declare private. | ||||||
|  | 	(fhandler_base::open_status): Ditto. | ||||||
|  | 	(class fhandler_socket): Move status bits into private bitfield struct | ||||||
|  | 	type status_flags.  Change accessor methods appropriately. | ||||||
|  | 	* fhandler_socket.cc (fhandler_socket::fhandler_socket): Accomodate | ||||||
|  | 	above status bit changes. | ||||||
|  | 	* tty.h: Remove status bit enumerator. | ||||||
|  | 	(TTYISSETF): Remove. | ||||||
|  | 	(TTYSETF): Remove. | ||||||
|  | 	(TTYCLEARF): Remove. | ||||||
|  | 	(TTYCONDSETF): Remove. | ||||||
|  | 	(tty_min::status): Define as private bitfield struct type status_flags. | ||||||
|  | 	Add appropriate accessor methods. | ||||||
|  | 	* fhandler_console.cc: Use tty_min::status accessor methods throughout. | ||||||
|  | 	* fhandler_termios.cc: Ditto. | ||||||
|  | 	* winsup.h (__ISSETF): Remove. | ||||||
|  | 	(__SETF): Remove. | ||||||
|  | 	(__CLEARF): Remove. | ||||||
|  | 	(__CONDSETF): Remove. | ||||||
|  |  | ||||||
| 2004-04-09  Corinna Vinschen  <corinna@vinschen.de> | 2004-04-09  Corinna Vinschen  <corinna@vinschen.de> | ||||||
|  |  | ||||||
| 	* fhandler.cc (fhandler_base::write): Use bool parameter in calls to | 	* fhandler.cc (fhandler_base::write): Use bool parameter in calls to | ||||||
|   | |||||||
| @@ -71,7 +71,6 @@ class fhandler_base | |||||||
|   friend class dtable; |   friend class dtable; | ||||||
|   friend void close_all_files (); |   friend void close_all_files (); | ||||||
|  |  | ||||||
|  protected: |  | ||||||
|   struct status_flags |   struct status_flags | ||||||
|   { |   { | ||||||
|     unsigned rbinary            : 1; /* binary read mode */ |     unsigned rbinary            : 1; /* binary read mode */ | ||||||
| @@ -92,7 +91,7 @@ class fhandler_base | |||||||
|     unsigned close_on_exec      : 1; /* close-on-exec */ |     unsigned close_on_exec      : 1; /* close-on-exec */ | ||||||
|     unsigned need_fork_fixup    : 1; /* Set if need to fixup after fork. */ |     unsigned need_fork_fixup    : 1; /* Set if need to fixup after fork. */ | ||||||
|  |  | ||||||
|     public: |    public: | ||||||
|     status_flags () : |     status_flags () : | ||||||
|       rbinary (0), rbinset (0), wbinary (0), wbinset (0), no_handle (0), |       rbinary (0), rbinset (0), wbinary (0), wbinset (0), no_handle (0), | ||||||
|       async_io (0), uninterruptible_io (0), append_mode (0), lseeked (0), |       async_io (0), uninterruptible_io (0), append_mode (0), lseeked (0), | ||||||
| @@ -355,9 +354,17 @@ class fhandler_socket: public fhandler_base | |||||||
|   HANDLE secret_event; |   HANDLE secret_event; | ||||||
|   struct _WSAPROTOCOL_INFOA *prot_info_ptr; |   struct _WSAPROTOCOL_INFOA *prot_info_ptr; | ||||||
|   char *sun_path; |   char *sun_path; | ||||||
|   unsigned sock_saw_shut_rd      : 1; /* Socket saw a SHUT_RD */ |   struct status_flags | ||||||
|   unsigned sock_saw_shut_wr      : 1; /* Socket saw a SHUT_WR */ |   { | ||||||
|   unsigned had_connect_or_listen : 2; |     unsigned sock_saw_shut_rd      : 1; /* Socket saw a SHUT_RD */ | ||||||
|  |     unsigned sock_saw_shut_wr      : 1; /* Socket saw a SHUT_WR */ | ||||||
|  |     unsigned had_connect_or_listen : 2; | ||||||
|  |    public: | ||||||
|  |     status_flags () : | ||||||
|  |       sock_saw_shut_rd (0), sock_saw_shut_wr (0), | ||||||
|  |       had_connect_or_listen (unconnected) | ||||||
|  |       {} | ||||||
|  |   } status; | ||||||
|  |  | ||||||
|  public: |  public: | ||||||
|   fhandler_socket (); |   fhandler_socket (); | ||||||
| @@ -365,20 +372,22 @@ class fhandler_socket: public fhandler_base | |||||||
|   int get_socket () { return (int) get_handle(); } |   int get_socket () { return (int) get_handle(); } | ||||||
|   fhandler_socket *is_socket () { return this; } |   fhandler_socket *is_socket () { return this; } | ||||||
|  |  | ||||||
|   bool saw_shutdown_read () const {return sock_saw_shut_rd;} |   bool saw_shutdown_read () const { return status.sock_saw_shut_rd; } | ||||||
|   bool saw_shutdown_write () const {return sock_saw_shut_wr;} |   bool saw_shutdown_write () const { return status.sock_saw_shut_wr; } | ||||||
|  |  | ||||||
|   void set_shutdown_read () { sock_saw_shut_rd = 1;} |   void set_shutdown_read () { status.sock_saw_shut_rd = 1;} | ||||||
|   void set_shutdown_write () { sock_saw_shut_wr = 1;} |   void set_shutdown_write () { status.sock_saw_shut_wr = 1;} | ||||||
|  |  | ||||||
|   bool is_unconnected () const { return had_connect_or_listen == unconnected; } |   bool is_unconnected () const | ||||||
|  |   	{ return status.had_connect_or_listen == unconnected; } | ||||||
|   bool is_connect_pending () const |   bool is_connect_pending () const | ||||||
|     { return had_connect_or_listen == connect_pending; } |     { return status.had_connect_or_listen == connect_pending; } | ||||||
|   bool is_connected () const { return had_connect_or_listen == connected; } |   bool is_connected () const | ||||||
|  |   	{ return status.had_connect_or_listen == connected; } | ||||||
|   void set_connect_state (connect_state newstate) |   void set_connect_state (connect_state newstate) | ||||||
|     { had_connect_or_listen = newstate; } | 	{ status.had_connect_or_listen = newstate; } | ||||||
|   connect_state get_connect_state () const |   connect_state get_connect_state () const | ||||||
|     { return (connect_state) had_connect_or_listen; } | 	{ return (connect_state) status.had_connect_or_listen; } | ||||||
|  |  | ||||||
|   int bind (const struct sockaddr *name, int namelen); |   int bind (const struct sockaddr *name, int namelen); | ||||||
|   int connect (const struct sockaddr *name, int namelen); |   int connect (const struct sockaddr *name, int namelen); | ||||||
|   | |||||||
| @@ -154,10 +154,8 @@ set_console_state_for_spawn () | |||||||
|   if (shared_console_info != NULL) |   if (shared_console_info != NULL) | ||||||
|     { |     { | ||||||
|       /* ACK.  Temporarily define for use in TTYSETF macro */ |       /* ACK.  Temporarily define for use in TTYSETF macro */ | ||||||
| #     define tc &shared_console_info->tty_min_state |  | ||||||
|       SetConsoleMode (h, ENABLE_LINE_INPUT | ENABLE_ECHO_INPUT | ENABLE_PROCESSED_INPUT); |       SetConsoleMode (h, ENABLE_LINE_INPUT | ENABLE_ECHO_INPUT | ENABLE_PROCESSED_INPUT); | ||||||
|       TTYSETF (RSTCONS); |       shared_console_info->tty_min_state.set_rstcons (); | ||||||
| #     undef tc |  | ||||||
|     } |     } | ||||||
|  |  | ||||||
|   CloseHandle (h); |   CloseHandle (h); | ||||||
| @@ -538,7 +536,7 @@ sig_exit: | |||||||
| void | void | ||||||
| fhandler_console::set_input_state () | fhandler_console::set_input_state () | ||||||
| { | { | ||||||
|   if (TTYISSETF (RSTCONS)) |   if (tc->needs_rstcons ()) | ||||||
|     input_tcsetattr (0, &tc->ti); |     input_tcsetattr (0, &tc->ti); | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -660,7 +658,7 @@ fhandler_console::open (int flags, mode_t) | |||||||
|       SetConsoleMode (get_io_handle (), ENABLE_WINDOW_INPUT | ENABLE_MOUSE_INPUT | cflags); |       SetConsoleMode (get_io_handle (), ENABLE_WINDOW_INPUT | ENABLE_MOUSE_INPUT | cflags); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|   TTYCLEARF (RSTCONS); |   tc->clear_rstcons (); | ||||||
|   set_open_status (); |   set_open_status (); | ||||||
|   cygheap->open_fhs++; |   cygheap->open_fhs++; | ||||||
|   debug_printf ("incremented open_fhs, now %d", cygheap->open_fhs); |   debug_printf ("incremented open_fhs, now %d", cygheap->open_fhs); | ||||||
| @@ -844,7 +842,7 @@ fhandler_console::input_tcsetattr (int, struct termios const *t) | |||||||
| 		      res, t, flags, t->c_lflag, t->c_iflag); | 		      res, t, flags, t->c_lflag, t->c_iflag); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|   TTYCLEARF (RSTCONS); |   tc->clear_rstcons (); | ||||||
|   return res; |   return res; | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -124,9 +124,7 @@ get_inet_addr (const struct sockaddr *in, int inlen, | |||||||
| fhandler_socket::fhandler_socket () : | fhandler_socket::fhandler_socket () : | ||||||
|   fhandler_base (), |   fhandler_base (), | ||||||
|   sun_path (NULL), |   sun_path (NULL), | ||||||
|   sock_saw_shut_rd (0), |   status () | ||||||
|   sock_saw_shut_wr (0), |  | ||||||
|   had_connect_or_listen (unconnected) |  | ||||||
| { | { | ||||||
|   set_need_fork_fixup (); |   set_need_fork_fixup (); | ||||||
|   prot_info_ptr = (LPWSAPROTOCOL_INFOA) cmalloc (HEAP_BUF, |   prot_info_ptr = (LPWSAPROTOCOL_INFOA) cmalloc (HEAP_BUF, | ||||||
|   | |||||||
| @@ -31,7 +31,7 @@ fhandler_termios::tcinit (tty_min *this_tc, bool force) | |||||||
|  |  | ||||||
|   tc = this_tc; |   tc = this_tc; | ||||||
|  |  | ||||||
|   if (force || !TTYISSETF (INITIALIZED)) |   if (force || !tc->is_initialized ()) | ||||||
|     { |     { | ||||||
|       tc->ti.c_iflag = BRKINT | ICRNL | IXON; |       tc->ti.c_iflag = BRKINT | ICRNL | IXON; | ||||||
|       tc->ti.c_oflag = OPOST | ONLCR; |       tc->ti.c_oflag = OPOST | ONLCR; | ||||||
| @@ -58,7 +58,7 @@ fhandler_termios::tcinit (tty_min *this_tc, bool force) | |||||||
|  |  | ||||||
|       tc->ti.c_ispeed = tc->ti.c_ospeed = B38400; |       tc->ti.c_ispeed = tc->ti.c_ospeed = B38400; | ||||||
|       tc->pgid = myself->pgid; |       tc->pgid = myself->pgid; | ||||||
|       TTYSETF (INITIALIZED); |       tc->initialize (); | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -30,17 +30,6 @@ details. */ | |||||||
|  |  | ||||||
| #include <sys/termios.h> | #include <sys/termios.h> | ||||||
|  |  | ||||||
| enum |  | ||||||
| { |  | ||||||
|   TTY_INITIALIZED = 1,		/* Set if tty is initialized */ |  | ||||||
|   TTY_RSTCONS = 2		/* Set if console needs to be set to "non-cooked" */ |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| #define TTYISSETF(x)	__ISSETF (tc, x, TTY) |  | ||||||
| #define TTYSETF(x)	__SETF (tc, x, TTY) |  | ||||||
| #define TTYCLEARF(x)	__CLEARF (tc, x, TTY) |  | ||||||
| #define TTYCONDSETF(n, x) __CONDSETF(n, tc, x, TTY) |  | ||||||
|  |  | ||||||
| #ifndef MIN_CTRL_C_SLOP | #ifndef MIN_CTRL_C_SLOP | ||||||
| #define MIN_CTRL_C_SLOP 50 | #define MIN_CTRL_C_SLOP 50 | ||||||
| #endif | #endif | ||||||
| @@ -48,13 +37,24 @@ enum | |||||||
| class tty_min | class tty_min | ||||||
| { | { | ||||||
|   pid_t sid;	/* Session ID of tty */ |   pid_t sid;	/* Session ID of tty */ | ||||||
|  |   struct status_flags | ||||||
|  |   { | ||||||
|  |     unsigned initialized : 1; /* Set if tty is initialized */ | ||||||
|  |     unsigned rstcons     : 1; /* Set if console needs to be set to "non-cooked" */ | ||||||
|  |   } status; | ||||||
|  |  | ||||||
| public: | public: | ||||||
|   DWORD status; |  | ||||||
|   pid_t pgid; |   pid_t pgid; | ||||||
|   int output_stopped; |   int output_stopped; | ||||||
|   int ntty; |   int ntty; | ||||||
|   DWORD last_ctrl_c;	// tick count of last ctrl-c |   DWORD last_ctrl_c;	// tick count of last ctrl-c | ||||||
|  |  | ||||||
|  |   void initialize () { status.initialized = 1; } | ||||||
|  |   bool is_initialized () { return status.initialized; } | ||||||
|  |   void set_rstcons () { status.rstcons = 1; } | ||||||
|  |   void clear_rstcons () { status.rstcons = 1; } | ||||||
|  |   bool needs_rstcons () { return status.rstcons; } | ||||||
|  |  | ||||||
|   tty_min (int t = -1, pid_t s = -1) : sid (s), ntty (t) {} |   tty_min (int t = -1, pid_t s = -1) : sid (s), ntty (t) {} | ||||||
|   void setntty (int n) {ntty = n;} |   void setntty (int n) {ntty = n;} | ||||||
|   pid_t getpgid () {return pgid;} |   pid_t getpgid () {return pgid;} | ||||||
|   | |||||||
| @@ -131,16 +131,6 @@ extern int cygserver_running; | |||||||
|  |  | ||||||
| #define TITLESIZE 1024 | #define TITLESIZE 1024 | ||||||
|  |  | ||||||
| /* status bit manipulation */ |  | ||||||
| #define __ISSETF(what, x, prefix) \ |  | ||||||
|   ((what)->status & prefix##_##x) |  | ||||||
| #define __SETF(what, x, prefix) \ |  | ||||||
|   ((what)->status |= prefix##_##x) |  | ||||||
| #define __CLEARF(what, x, prefix) \ |  | ||||||
|   ((what)->status &= ~prefix##_##x) |  | ||||||
| #define __CONDSETF(n, what, x, prefix) \ |  | ||||||
|   ((n) ? __SETF (what, x, prefix) : __CLEARF (what, x, prefix)) |  | ||||||
|  |  | ||||||
| #include "debug.h" | #include "debug.h" | ||||||
|  |  | ||||||
| /* Events/mutexes */ | /* Events/mutexes */ | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user