repo: rxvt-unicode-sixel action: commit revision: path_from: revision_from: 0ae41e0b74edc02d837f1152c0152fff944b7fcb: path_to: revision_to:
commit 0ae41e0b74edc02d837f1152c0152fff944b7fcb Author: Marc LehmannDate: Tue Jan 17 10:59:32 2006 +0000 *** empty log message *** diff --git a/src/logging.C b/src/logging.C
--- a/src/logging.C
+++ b/src/logging.C
@@ -57,7 +57,7 @@ static void rxvt_update_lastlog (const char *fname, con
* make and write utmp and wtmp entries
*/
void
-rxvt_ptytty::login (int cmd_pid, bool login_shell, const char *hostname)
+rxvt_ptytty_unix::login (int cmd_pid, bool login_shell, const char *hostname)
{
const char *pty = name;
@@ -227,7 +227,7 @@ rxvt_ptytty::login (int cmd_pid, bool login_shell, const char *hostname)
* remove utmp and wtmp entries
*/
void
-rxvt_ptytty::logout ()
+rxvt_ptytty_unix::logout ()
{
if (!cmd_pid)
return;
diff --git a/src/ptytty.C b/src/ptytty.C
--- a/src/ptytty.C +++ b/src/ptytty.C @@ -56,6 +56,8 @@ #include#include +///////////////////////////////////////////////////////////////////////////// + /* ------------------------------------------------------------------------- * * GET PSEUDO TELETYPE - MASTER AND SLAVE * * ------------------------------------------------------------------------- */ @@ -220,7 +222,7 @@ get_tty (char *ttydev) * Make our tty a controlling tty so that /dev/tty points to us */ static int -control_tty (int fd_tty, const char *ttydev) +control_tty (int fd_tty) { #ifndef __QNX__ int fd; @@ -251,7 +253,7 @@ control_tty (int fd_tty, const char *ttydev) close (fd); /* ouch: still have controlling tty */ /* ---------------------------------------- */ -#if defined(PTYS_ARE_PTMX) && defined(I_PUSH) +# if defined(PTYS_ARE_PTMX) && defined(I_PUSH) /* * Push STREAMS modules: * ptem: pseudo-terminal hardware emulation module. @@ -269,25 +271,17 @@ control_tty (int fd_tty, const char *ttydev) * close () - on the master side which causes a hang up to be sent * through - Geoff Wing */ -# ifdef HAVE_ISASTREAM +# ifdef HAVE_ISASTREAM if (isastream (fd_tty) == 1) -# endif +# endif { ioctl (fd_tty, I_PUSH, "ptem"); ioctl (fd_tty, I_PUSH, "ldterm"); ioctl (fd_tty, I_PUSH, "ttcompat"); } -#endif +# endif /* ---------------------------------------- */ -# if defined(TIOCSCTTY) fd = ioctl (fd_tty, TIOCSCTTY, NULL); -# elif defined(TIOCSETCTTY) - fd = ioctl (fd_tty, TIOCSETCTTY, NULL); -# else - fd = open (ttydev, O_RDWR); - if (fd >= 0) - close (fd); -# endif /* ---------------------------------------- */ fd = open ("/dev/tty", O_WRONLY); if (fd < 0) @@ -299,6 +293,51 @@ control_tty (int fd_tty, const char *ttydev) return 0; } +void +rxvt_ptytty::close_tty () +{ + if (tty < 0) + return; + + close (tty); + tty = -1; +} + +bool +rxvt_ptytty::make_controlling_tty () +{ + return control_tty (tty) >= 0; +} + +void +rxvt_ptytty::set_utf8_mode (bool on) +{ +#ifdef IUTF8 + if (pty < 0) + return; + + struct termios tio; + + if (tcgetattr (pty, &tio) != -1) + { + tcflag_t new_cflag = tio.c_iflag; + + if (on) + new_cflag |= IUTF8; + else + new_cflag &= ~IUTF8; + + if (new_cflag != tio.c_iflag) + { + tio.c_iflag = new_cflag; + tcsetattr (pty, TCSANOW, &tio); + } + } +#endif +} + +///////////////////////////////////////////////////////////////////////////// + #ifndef NO_SETOWNER_TTYDEV static struct ttyconf { gid_t gid; @@ -323,8 +362,10 @@ static struct ttyconf { } } ttyconf; +///////////////////////////////////////////////////////////////////////////// + void -rxvt_ptytty::privileges (rxvt_privaction action) +rxvt_ptytty_unix::privileges (rxvt_privaction action) { if (!name || !*name) return; @@ -367,7 +408,7 @@ rxvt_ptytty::privileges (rxvt_privaction action) } #endif -rxvt_ptytty::rxvt_ptytty () +rxvt_ptytty_unix::rxvt_ptytty_unix () { pty = tty = -1; name = 0; @@ -379,25 +420,14 @@ rxvt_ptytty::rxvt_ptytty () #endif } -rxvt_ptytty::~rxvt_ptytty () +rxvt_ptytty_unix::~rxvt_ptytty_unix () { logout (); put (); } void - -rxvt_ptytty::close_tty () -{ - if (tty < 0) - return; - - close (tty); - tty = -1; -} - -void -rxvt_ptytty::put () +rxvt_ptytty_unix::put () { #ifndef NO_SETOWNER_TTYDEV privileges (RESTORE); @@ -412,13 +442,7 @@ rxvt_ptytty::put () } bool -rxvt_ptytty::make_controlling_tty () -{ - return control_tty (tty, name) >= 0; -} - -bool -rxvt_ptytty::get () +rxvt_ptytty_unix::get () { /* get master (pty) */ if ((pty = get_pty (&tty, &name)) < 0) @@ -443,32 +467,5 @@ rxvt_ptytty::get () return true; } -void -rxvt_ptytty::set_utf8_mode (bool on) -{ -#ifdef IUTF8 - if (pty < 0) - return; - - struct termios tio; - - if (tcgetattr (pty, &tio) != -1) - { - tcflag_t new_cflag = tio.c_iflag; - - if (on) - new_cflag |= IUTF8; - else - new_cflag &= ~IUTF8; - - if (new_cflag != tio.c_iflag) - { - tio.c_iflag = new_cflag; - tcsetattr (pty, TCSANOW, &tio); - } - } -#endif -} - /*----------------------- end-of-file (C source) -----------------------*/ diff --git a/src/ptytty.h b/src/ptytty.h
--- a/src/ptytty.h
+++ b/src/ptytty.h
@@ -58,28 +58,40 @@
enum rxvt_privaction { IGNORE = 'i', SAVE = 's', RESTORE = 'r' };
struct rxvt_ptytty {
-#ifndef RESET_TTY_TO_COMMON_DEFAULTS
- struct stat savestat; /* original status of our tty */
-#endif
-#ifndef NO_SETOWNER_TTYDEV
- void privileges (rxvt_privaction action);
- bool saved;
-#endif
-public:
int pty; // pty file descriptor; connected to rxvt
int tty; // tty file descriptor; connected to child
- char *name;
- rxvt_ptytty ();
- ~rxvt_ptytty ();
+ virtual ~rxvt_ptytty ()
+ {
+ //
+ }
- bool get ();
- void put ();
+ virtual bool get () = 0;
+ virtual void put () = 0;
+
+ virtual void login (int cmd_pid, bool login_shell, const char *hostname) = 0;
+ virtual void logout () = 0;
void close_tty ();
bool make_controlling_tty ();
void set_utf8_mode (bool on);
+};
+
+struct rxvt_ptytty_unix : rxvt_ptytty {
+ char *name;
+
+#ifndef RESET_TTY_TO_COMMON_DEFAULTS
+ struct stat savestat; /* original status of our tty */
+#endif
+#ifndef NO_SETOWNER_TTYDEV
+ void privileges (rxvt_privaction action);
+ bool saved;
+#endif
+public:
+
+ rxvt_ptytty_unix ();
+ ~rxvt_ptytty_unix ();
#if UTMP_SUPPORT
int utmp_pos;
@@ -96,6 +108,9 @@ public:
char ut_id[5];
#endif
+ bool get ();
+ void put ();
+
void login (int cmd_pid, bool login_shell, const char *hostname);
void logout ();
#endif
diff --git a/src/rxvt.h b/src/rxvt.h
--- a/src/rxvt.h
+++ b/src/rxvt.h
@@ -1124,7 +1124,7 @@ struct rxvt_term : zero_initialized, rxvt_vars {
char *cmdbuf_ptr, *cmdbuf_endp;
char cmdbuf_base[CBUFSIZ];
- rxvt_ptytty pty;
+ rxvt_ptytty_unix pty;
rxvt_salloc *talloc; // text line allocator
rxvt_salloc *ralloc; // rend line allocator
-----END OF PAGE-----