]> git.saurik.com Git - apple/xnu.git/blobdiff - bsd/kern/tty_compat.c
xnu-6153.81.5.tar.gz
[apple/xnu.git] / bsd / kern / tty_compat.c
index e5a53b56c2754e25333b86c20a3356118113418b..ac452a3d9b227a0c5495fce3ce5b3b643c89929b 100644 (file)
@@ -1,8 +1,8 @@
 /*
- * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
+ * Copyright (c) 2019 Apple Inc. All rights reserved.
  *
  * @APPLE_OSREFERENCE_LICENSE_HEADER_START@
- * 
+ *
  * This file contains Original Code and/or Modifications of Original Code
  * as defined in and that are subject to the Apple Public Source License
  * Version 2.0 (the 'License'). You may not use this file except in
  * unlawful or unlicensed copies of an Apple operating system, or to
  * circumvent, violate, or enable the circumvention or violation of, any
  * terms of an Apple operating system software license agreement.
- * 
+ *
  * Please obtain a copy of the License at
  * http://www.opensource.apple.com/apsl/ and read it before using this file.
- * 
+ *
  * The Original Code and all software distributed under the License are
  * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
@@ -22,7 +22,7 @@
  * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
  * Please see the License for the specific language governing rights and
  * limitations under the License.
- * 
+ *
  * @APPLE_OSREFERENCE_LICENSE_HEADER_END@
  */
 /* Copyright (c) 1997 Apple Computer, Inc. All Rights Reserved */
  */
 
 /*
- * mapping routines for old line discipline (yuck)
+ * Compatibility routines for BSD 4.3 tty ioctl() commands
+ *
+ * The only function externalized from this file is ttcompat() and it is
+ * externalized as private extern to prevent exporting of the symbol when
+ * KEXTs link against the kernel.
+ *
+ * Locks:      All functions in this file assume that the tty_lock()
+ *             is held on the tty structure before these functions are
+ *             called.
  */
 
 #include <sys/param.h>
 #include <sys/sysctl.h>
 #include <sys/syslog.h>
 
-/* NeXT Move define down here cause COMPAT_43_TTY not valid earlier */
-#if COMPAT_43_TTY || defined(COMPAT_SUNOS)
-
 static int ttcompatgetflags(struct tty *tp);
-static void ttcompatsetflags(struct tty        *tp, struct termios *t);
+static void ttcompatsetflags(struct tty *tp, struct termios *t);
 static void ttcompatsetlflags(struct tty *tp, struct termios *t);
 static int ttcompatspeedtab(int speed, struct speedtab *table);
 
@@ -93,26 +98,26 @@ static int ttcompatspeedtab(int speed, struct speedtab *table);
  * name space.
  */
 static struct speedtab compatspeeds[] = {
-#define MAX_SPEED      17
-       { 115200, 17 },
-       { 57600, 16 },
-       { 38400, 15 },
-       { 19200, 14 },
-       { 9600, 13 },
-       { 4800, 12 },
-       { 2400, 11 },
-       { 1800, 10 },
-       { 1200, 9 },
-       { 600,  8 },
-       { 300,  7 },
-       { 200,  6 },
-       { 150,  5 },
-       { 134,  4 },
-       { 110,  3 },
-       { 75,   2 },
-       { 50,   1 },
-       { 0,    0 },
-       { -1,   -1 },
+#define MAX_SPEED       17
+       { .sp_speed = 115200, .sp_code = 17 },
+       { .sp_speed = 57600, .sp_code = 16 },
+       { .sp_speed = 38400, .sp_code = 15 },
+       { .sp_speed = 19200, .sp_code = 14 },
+       { .sp_speed = 9600, .sp_code = 13 },
+       { .sp_speed = 4800, .sp_code = 12 },
+       { .sp_speed = 2400, .sp_code = 11 },
+       { .sp_speed = 1800, .sp_code = 10 },
+       { .sp_speed = 1200, .sp_code = 9 },
+       { .sp_speed = 600, .sp_code = 8 },
+       { .sp_speed = 300, .sp_code = 7 },
+       { .sp_speed = 200, .sp_code = 6 },
+       { .sp_speed = 150, .sp_code = 5 },
+       { .sp_speed = 134, .sp_code = 4 },
+       { .sp_speed = 110, .sp_code = 3 },
+       { .sp_speed = 75, .sp_code = 2 },
+       { .sp_speed = 50, .sp_code = 1 },
+       { .sp_speed = 0, .sp_code = 0 },
+       { .sp_speed = -1, .sp_code = -1 },
 };
 static int compatspcodes[] = {
        0, 50, 75, 110, 134, 150, 200, 300, 600, 1200,
@@ -144,14 +149,18 @@ static int compatspcodes[] = {
 static int
 ttcompatspeedtab(int speed, struct speedtab *table)
 {
-       if (speed == 0)
-               return (0); /* hangup */
-       for ( ; table->sp_speed > 0; table++)
-               if (table->sp_speed <= speed) /* nearest one, rounded down */
-                       return (table->sp_code);
-       return (1); /* 50, min and not hangup */
+       if (speed == 0) {
+               return 0; /* hangup */
+       }
+       for (; table->sp_speed > 0; table++) {
+               if (table->sp_speed <= speed) { /* nearest one, rounded down */
+                       return table->sp_code;
+               }
+       }
+       return 1; /* 50, min and not hangup */
 }
 
+
 /*
  * ttsetcompat
  *
@@ -167,8 +176,8 @@ ttcompatspeedtab(int speed, struct speedtab *table)
  *             TIOCLSET        ->      TIOCSETA
  *
  *     The converted command argument and potentially modified 'term'
- *     argument are returned to the caller, which will then call ttioctl(),
- *     if this function returns successfully.
+ *     argument are returned to ttcompat(), which will then call
+ *     ttioctl_locked(), if this function returns successfully.
  *
  * Parameters  struct tty *tp          The tty on which the operation is
  *                                     being performed.
@@ -192,45 +201,52 @@ ttcompatspeedtab(int speed, struct speedtab *table)
  *             TIOCLBIC, or TIOCLSET.
  *
  *             All other tp fields will remain unmodifed, since the struct
- *             termious is a local stack copy from ttcompat(), and not the
- *             real thing.  A subsequent call to ttioctl() in ttcompat(),
- *             however, may result in subsequent changes.
+ *             termios is a local stack copy from ttcompat(), and not the
+ *             real thing.  A subsequent call to ttioctl_locked() in
+ *             ttcompat(), however, may result in subsequent changes.
+ *
+ * WARNING:    This compatibility code is not 6/432 clean; it will only
+ *             work for 32 bit processes on 32 bit kernels or 64 bit
+ *             processes on 64 bit kernels.  We are not addressing this
+ *             due to <rdar://6904053>.
  */
-__private_extern__ int
+static int
 ttsetcompat(struct tty *tp, u_long *com, caddr_t data, struct termios *term)
 {
        switch (*com) {
        case TIOCSETP:
-               /*
-                * Wait for all characters queued for output to drain, then
-                * Discard all characters queued for input, and then set
-                * the input and output speeds and device flags, per the
-                * contents of the struct sgttyb that 'data' points to.
-                */
+       /*
+        * Wait for all characters queued for output to drain, then
+        * Discard all characters queued for input, and then set
+        * the input and output speeds and device flags, per the
+        * contents of the struct sgttyb that 'data' points to.
+        */
        case TIOCSETN:
                /*
                 * Same as TIOCSETP, but the output is not drained, and any
                 * pending input is not discarded.
                 */
-           {
-               register struct sgttyb *sg = (struct sgttyb *)data;
+       {
+               struct sgttyb *sg = (struct sgttyb *)data;
                int speed;
 
-               if ((speed = sg->sg_ispeed) > MAX_SPEED || speed < 0)
-                       return(EINVAL);
-               else if (speed != ttcompatspeedtab(tp->t_ispeed, compatspeeds))
+               if ((speed = sg->sg_ispeed) > MAX_SPEED || speed < 0) {
+                       return EINVAL;
+               } else if (speed != ttcompatspeedtab(tp->t_ispeed, compatspeeds)) {
                        term->c_ispeed = compatspcodes[speed];
-               else
+               } else {
                        term->c_ispeed = tp->t_ispeed;
-               if ((speed = sg->sg_ospeed) > MAX_SPEED || speed < 0)
-                       return(EINVAL);
-               else if (speed != ttcompatspeedtab(tp->t_ospeed, compatspeeds))
+               }
+               if ((speed = sg->sg_ospeed) > MAX_SPEED || speed < 0) {
+                       return EINVAL;
+               } else if (speed != ttcompatspeedtab(tp->t_ospeed, compatspeeds)) {
                        term->c_ospeed = compatspcodes[speed];
-               else
+               } else {
                        term->c_ospeed = tp->t_ospeed;
+               }
                term->c_cc[VERASE] = sg->sg_erase;
                term->c_cc[VKILL] = sg->sg_kill;
-               tp->t_flags = (tp->t_flags&0xffff0000) | (sg->sg_flags&0xffff);
+               tp->t_flags = (tp->t_flags & 0xffff0000) | (sg->sg_flags & 0xffff);
                ttcompatsetflags(tp, term);
                *com = (*com == TIOCSETP) ? TIOCSETAF : TIOCSETA;
                break;
@@ -240,9 +256,9 @@ ttsetcompat(struct tty *tp, u_long *com, caddr_t data, struct termios *term)
                 * Set the terminal control characters per the contents of
                 * the struct tchars that 'data' points to.
                 */
-           {
+       {
                struct tchars *tc = (struct tchars *)data;
-               register cc_t *cc;
+               cc_t *cc;
 
                cc = term->c_cc;
                cc[VINTR] = tc->t_intrc;
@@ -251,8 +267,9 @@ ttsetcompat(struct tty *tp, u_long *com, caddr_t data, struct termios *term)
                cc[VSTOP] = tc->t_stopc;
                cc[VEOF] = tc->t_eofc;
                cc[VEOL] = tc->t_brkc;
-               if (tc->t_brkc == -1)
+               if (tc->t_brkc == -1) {
                        cc[VEOL2] = _POSIX_VDISABLE;
+               }
                *com = TIOCSETA;
                break;
        }
@@ -263,7 +280,7 @@ ttsetcompat(struct tty *tp, u_long *com, caddr_t data, struct termios *term)
                 */
        {
                struct ltchars *ltc = (struct ltchars *)data;
-               register cc_t *cc;
+               cc_t *cc;
 
                cc = term->c_cc;
                cc[VSUSP] = ltc->t_suspc;
@@ -276,32 +293,33 @@ ttsetcompat(struct tty *tp, u_long *com, caddr_t data, struct termios *term)
                break;
        }
        case TIOCLBIS:
-               /*
-                * Set the bits in the terminal state local flags word
-                * (16 bits) for the terminal to the current bits OR
-                * those in the 16 bit value pointed to by 'data'.
-                */
+       /*
+        * Set the bits in the terminal state local flags word
+        * (16 bits) for the terminal to the current bits OR
+        * those in the 16 bit value pointed to by 'data'.
+        */
        case TIOCLBIC:
-               /*
-                * Clear the bits in the terminal state local flags word
-                * for the terminal to the current bits AND those bits NOT
-                * in the 16 bit value pointed to by 'data'.
-                */
+       /*
+        * Clear the bits in the terminal state local flags word
+        * for the terminal to the current bits AND those bits NOT
+        * in the 16 bit value pointed to by 'data'.
+        */
        case TIOCLSET:
                /*
                 * Set the terminal state local flags word to exactly those
                 * bits that correspond to the 16 bit value pointed to by
                 * 'data'.
                 */
-               if (*com == TIOCLSET)
-                       tp->t_flags = (tp->t_flags&0xffff) | *(int *)data<<16;
-               else {
+               if (*com == TIOCLSET) {
+                       tp->t_flags = (tp->t_flags & 0xffff) | *(int *)data << 16;
+               else {
                        tp->t_flags =
-                        (ttcompatgetflags(tp)&0xffff0000)|(tp->t_flags&0xffff);
-                       if (*com == TIOCLBIS)
-                               tp->t_flags |= *(int *)data<<16;
-                       else
-                               tp->t_flags &= ~(*(int *)data<<16);
+                           (ttcompatgetflags(tp) & 0xffff0000) | (tp->t_flags & 0xffff);
+                       if (*com == TIOCLBIS) {
+                               tp->t_flags |= *(int *)data << 16;
+                       } else {
+                               tp->t_flags &= ~(*(int *)data << 16);
+                       }
                }
                ttcompatsetlflags(tp, term);
                *com = TIOCSETA;
@@ -314,8 +332,8 @@ ttsetcompat(struct tty *tp, u_long *com, caddr_t data, struct termios *term)
  * ttcompat
  *
  * Description:        For 'set' commands, convert the command and arguments as
- *             necessary, and call ttioctl(), returning the result as
- *             our result; for 'get' commands, obtain the requested data
+ *             necessary, and call ttioctl_locked(), returning the result
+ *             as our result; for 'get' commands, obtain the requested data
  *             from the appropriate source, and return it in the expected
  *             format.  If the command is not recognized, return EINVAL.
  *
@@ -336,12 +354,12 @@ ttsetcompat(struct tty *tp, u_long *com, caddr_t data, struct termios *term)
  *                                     terminal with no associated session,
  *                                     or for which there is a session, but
  *                                     no session leader.
- *             EIOCTL                  If the command cannot be handled at
+ *             ENOTTY                  If the command cannot be handled at
  *                                     this layer, this will be returned.
- *             *                       Any value returned by ttioctl(), if a
- *                                     set command is requested.
+ *             *                       Any value returned by ttioctl_locked(),
+ *                                     if a set command is requested.
  *
- * NOTES:      The process pointer may be a proxy on whose behalf we are
+ * Notes:      The process pointer may be a proxy on whose behalf we are
  *             operating, so it is not safe to simply use current_process()
  *             instead.
  */
@@ -366,24 +384,26 @@ ttcompat(struct tty *tp, u_long com, caddr_t data, int flag, struct proc *p)
                int error;
 
                term = tp->t_termios;
-               if ((error = ttsetcompat(tp, &com, data, &term)) != 0)
+               if ((error = ttsetcompat(tp, &com, data, &term)) != 0) {
                        return error;
-               return ttioctl(tp, com, (caddr_t) &term, flag, p);
+               }
+               return ttioctl_locked(tp, com, (caddr_t) &term, flag, p);
        }
        case TIOCGETP:
                /*
                 * Get the current input and output speeds, and device
                 * flags, into the structure pointed to by 'data'.
                 */
-           {
-               register struct sgttyb *sg = (struct sgttyb *)data;
-               register cc_t *cc = tp->t_cc;
+       {
+               struct sgttyb *sg = (struct sgttyb *)data;
+               cc_t *cc = tp->t_cc;
 
                sg->sg_ospeed = ttcompatspeedtab(tp->t_ospeed, compatspeeds);
-               if (tp->t_ispeed == 0)
+               if (tp->t_ispeed == 0) {
                        sg->sg_ispeed = sg->sg_ospeed;
-               else
+               } else {
                        sg->sg_ispeed = ttcompatspeedtab(tp->t_ispeed, compatspeeds);
+               }
                sg->sg_erase = cc[VERASE];
                sg->sg_kill = cc[VKILL];
                sg->sg_flags = tp->t_flags = ttcompatgetflags(tp);
@@ -394,9 +414,9 @@ ttcompat(struct tty *tp, u_long com, caddr_t data, int flag, struct proc *p)
                 * Get the terminal control characters into the struct
                 * tchars that 'data' points to.
                 */
-           {
+       {
                struct tchars *tc = (struct tchars *)data;
-               register cc_t *cc = tp->t_cc;
+               cc_t *cc = tp->t_cc;
 
                tc->t_intrc = cc[VINTR];
                tc->t_quitc = cc[VQUIT];
@@ -413,7 +433,7 @@ ttcompat(struct tty *tp, u_long com, caddr_t data, int flag, struct proc *p)
                 */
        {
                struct ltchars *ltc = (struct ltchars *)data;
-               register cc_t *cc = tp->t_cc;
+               cc_t *cc = tp->t_cc;
 
                ltc->t_suspc = cc[VSUSP];
                ltc->t_dsuspc = cc[VDSUSP];
@@ -429,9 +449,9 @@ ttcompat(struct tty *tp, u_long com, caddr_t data, int flag, struct proc *p)
                 * value pointed to by 'data'.
                 */
                tp->t_flags =
-                (ttcompatgetflags(tp) & 0xffff0000UL)
-                  | (tp->t_flags & 0xffff);
-               *(int *)data = tp->t_flags>>16;
+                   (ttcompatgetflags(tp) & 0xffff0000UL)
+                   | (tp->t_flags & 0xffff);
+               *(int *)data = tp->t_flags >> 16;
                break;
 
        case OTIOCGETD:
@@ -447,29 +467,31 @@ ttcompat(struct tty *tp, u_long com, caddr_t data, int flag, struct proc *p)
                 * Set the current line discipline based on the value of the
                 * int pointed to by 'data'.
                 */
-           {
+       {
                int ldisczero = 0;
 
-               return (ttioctl(tp, TIOCSETD, 
-                   *(int *)data == 2 ? (caddr_t)&ldisczero : data, flag, p));
-           }
+               return ttioctl_locked(tp, TIOCSETD,
+                          *(int *)data == 2 ? (caddr_t)&ldisczero : data, flag, p);
+       }
 
        case OTIOCCONS:
                /*
                 * Become the console device.
                 */
                *(int *)data = 1;
-               return (ttioctl(tp, TIOCCONS, data, flag, p));
+               return ttioctl_locked(tp, TIOCCONS, data, flag, p);
 
        case TIOCGSID:
                /*
                 * Get the current session ID (controlling process' PID).
                 */
-               if (tp->t_session == NULL)
+               if (tp->t_session == NULL) {
                        return ENOTTY;
+               }
 
-               if (tp->t_session->s_leader == NULL)
+               if (tp->t_session->s_leader == NULL) {
                        return ENOTTY;
+               }
 
                *(int *) data =  tp->t_session->s_leader->p_pid;
                break;
@@ -478,13 +500,13 @@ ttcompat(struct tty *tp, u_long com, caddr_t data, int flag, struct proc *p)
                /*
                 * This ioctl is not handled at this layer.
                 */
-               return (ENOTTY);
+               return ENOTTY;
        }
 
        /*
         * Successful 'get' operation.
         */
-       return (0);
+       return 0;
 }
 
 /*
@@ -506,59 +528,73 @@ ttcompat(struct tty *tp, u_long com, caddr_t data, int flag, struct proc *p)
 static int
 ttcompatgetflags(struct tty *tp)
 {
-       register tcflag_t iflag = tp->t_iflag;
-       register tcflag_t lflag = tp->t_lflag;
-       register tcflag_t oflag = tp->t_oflag;
-       register tcflag_t cflag = tp->t_cflag;
-       register int flags = 0;
+       tcflag_t iflag  = tp->t_iflag;
+       tcflag_t lflag  = tp->t_lflag;
+       tcflag_t oflag  = tp->t_oflag;
+       tcflag_t cflag  = tp->t_cflag;
+       int flags = 0;
 
-       if (iflag&IXOFF)
+       if (iflag & IXOFF) {
                flags |= TANDEM;
-       if (iflag&ICRNL || oflag&ONLCR)
+       }
+       if (iflag & ICRNL || oflag & ONLCR) {
                flags |= CRMOD;
-       if ((cflag&CSIZE) == CS8) {
+       }
+       if ((cflag & CSIZE) == CS8) {
                flags |= PASS8;
-               if (iflag&ISTRIP)
+               if (iflag & ISTRIP) {
                        flags |= ANYP;
-       }
-       else if (cflag&PARENB) {
-               if (iflag&INPCK) {
-                       if (cflag&PARODD)
+               }
+       } else if (cflag & PARENB) {
+               if (iflag & INPCK) {
+                       if (cflag & PARODD) {
                                flags |= ODDP;
-                       else
+                       } else {
                                flags |= EVENP;
-               } else
+                       }
+               } else {
                        flags |= EVENP | ODDP;
+               }
        }
 
-       if ((lflag&ICANON) == 0) {
+       if ((lflag & ICANON) == 0) {
                /* fudge */
-               if (iflag&(INPCK|ISTRIP|IXON) || lflag&(IEXTEN|ISIG)
-                   || (cflag&(CSIZE|PARENB)) != CS8)
+               if (iflag & (INPCK | ISTRIP | IXON) || lflag & (IEXTEN | ISIG)
+                   || (cflag & (CSIZE | PARENB)) != CS8) {
                        flags |= CBREAK;
-               else
+               } else {
                        flags |= RAW;
+               }
        }
-       if (!(flags&RAW) && !(oflag&OPOST) && (cflag&(CSIZE|PARENB)) == CS8)
+       if (!(flags & RAW) && !(oflag & OPOST) && (cflag & (CSIZE | PARENB)) == CS8) {
                flags |= LITOUT;
-       if (cflag&MDMBUF)
+       }
+       if (cflag & MDMBUF) {
                flags |= MDMBUF;
-       if ((cflag&HUPCL) == 0)
+       }
+       if ((cflag & HUPCL) == 0) {
                flags |= NOHANG;
-       if (oflag&OXTABS)
+       }
+       if (oflag & OXTABS) {
                flags |= XTABS;
-       if (lflag&ECHOE)
-               flags |= CRTERA|CRTBS;
-       if (lflag&ECHOKE)
-               flags |= CRTKIL|CRTBS;
-       if (lflag&ECHOPRT)
+       }
+       if (lflag & ECHOE) {
+               flags |= CRTERA | CRTBS;
+       }
+       if (lflag & ECHOKE) {
+               flags |= CRTKIL | CRTBS;
+       }
+       if (lflag & ECHOPRT) {
                flags |= PRTERA;
-       if (lflag&ECHOCTL)
+       }
+       if (lflag & ECHOCTL) {
                flags |= CTLECH;
-       if ((iflag&IXANY) == 0)
+       }
+       if ((iflag & IXANY) == 0) {
                flags |= DECCTQ;
-       flags |= lflag&(ECHO|TOSTOP|FLUSHO|PENDIN|NOFLSH);
-       return (flags);
+       }
+       flags |= lflag & (ECHO | TOSTOP | FLUSHO | PENDIN | NOFLSH);
+       return flags;
 }
 
 /*
@@ -578,28 +614,30 @@ ttcompatgetflags(struct tty *tp)
 static void
 ttcompatsetflags(struct tty *tp, struct termios *t)
 {
-       register int flags = tp->t_flags;
-       register tcflag_t iflag = t->c_iflag;
-       register tcflag_t oflag = t->c_oflag;
-       register tcflag_t lflag = t->c_lflag;
-       register tcflag_t cflag = t->c_cflag;
+       int flags = tp->t_flags;
+       tcflag_t iflag  = t->c_iflag;
+       tcflag_t oflag  = t->c_oflag;
+       tcflag_t lflag  = t->c_lflag;
+       tcflag_t cflag  = t->c_cflag;
 
        if (flags & RAW) {
                iflag = IGNBRK;
-               lflag &= ~(ECHOCTL|ISIG|ICANON|IEXTEN);
+               lflag &= ~(ECHOCTL | ISIG | ICANON | IEXTEN);
        } else {
-               iflag &= ~(PARMRK|IGNPAR|IGNCR|INLCR);
-               iflag |= BRKINT|IXON|IMAXBEL;
-               lflag |= ISIG|IEXTEN|ECHOCTL;   /* XXX was echoctl on ? */
-               if (flags & XTABS)
+               iflag &= ~(PARMRK | IGNPAR | IGNCR | INLCR);
+               iflag |= BRKINT | IXON | IMAXBEL;
+               lflag |= ISIG | IEXTEN | ECHOCTL;   /* XXX was echoctl on ? */
+               if (flags & XTABS) {
                        oflag |= OXTABS;
-               else
+               } else {
                        oflag &= ~OXTABS;
-               if (flags & CBREAK)
+               }
+               if (flags & CBREAK) {
                        lflag &= ~ICANON;
-               else
+               } else {
                        lflag |= ICANON;
-               if (flags&CRMOD) {
+               }
+               if (flags & CRMOD) {
                        iflag |= ICRNL;
                        oflag |= ONLCR;
                } else {
@@ -607,45 +645,51 @@ ttcompatsetflags(struct tty *tp, struct termios *t)
                        oflag &= ~ONLCR;
                }
        }
-       if (flags&ECHO)
+       if (flags & ECHO) {
                lflag |= ECHO;
-       else
+       } else {
                lflag &= ~ECHO;
+       }
 
-       cflag &= ~(CSIZE|PARENB);
-       if (flags&(RAW|LITOUT|PASS8)) {
+       cflag &= ~(CSIZE | PARENB);
+       if (flags & (RAW | LITOUT | PASS8)) {
                cflag |= CS8;
-               if (!(flags&(RAW|PASS8))
-                   || (flags&(RAW|PASS8|ANYP)) == (PASS8|ANYP))
+               if (!(flags & (RAW | PASS8))
+                   || (flags & (RAW | PASS8 | ANYP)) == (PASS8 | ANYP)) {
                        iflag |= ISTRIP;
-               else
+               } else {
                        iflag &= ~ISTRIP;
-               if (flags&(RAW|LITOUT))
+               }
+               if (flags & (RAW | LITOUT)) {
                        oflag &= ~OPOST;
-               else
+               } else {
                        oflag |= OPOST;
+               }
        } else {
-               cflag |= CS7|PARENB;
+               cflag |= CS7 | PARENB;
                iflag |= ISTRIP;
                oflag |= OPOST;
        }
        /* XXX don't set INPCK if RAW or PASS8? */
-       if ((flags&(EVENP|ODDP)) == EVENP) {
+       if ((flags & (EVENP | ODDP)) == EVENP) {
                iflag |= INPCK;
                cflag &= ~PARODD;
-       } else if ((flags&(EVENP|ODDP)) == ODDP) {
+       } else if ((flags & (EVENP | ODDP)) == ODDP) {
                iflag |= INPCK;
                cflag |= PARODD;
-       } else
+       } else {
                iflag &= ~INPCK;
-       if (flags&TANDEM)
+       }
+       if (flags & TANDEM) {
                iflag |= IXOFF;
-       else
+       } else {
                iflag &= ~IXOFF;
-       if ((flags&DECCTQ) == 0)
+       }
+       if ((flags & DECCTQ) == 0) {
                iflag |= IXANY;
-       else
+       } else {
                iflag &= ~IXANY;
+       }
        t->c_iflag = iflag;
        t->c_oflag = oflag;
        t->c_lflag = lflag;
@@ -669,47 +713,55 @@ ttcompatsetflags(struct tty *tp, struct termios *t)
 static void
 ttcompatsetlflags(struct tty *tp, struct termios *t)
 {
-       register int flags = tp->t_flags;
-       register tcflag_t iflag = t->c_iflag;
-       register tcflag_t oflag = t->c_oflag;
-       register tcflag_t lflag = t->c_lflag;
-       register tcflag_t cflag = t->c_cflag;
-
-       iflag &= ~(PARMRK|IGNPAR|IGNCR|INLCR);
-       if (flags&CRTERA)
+       int flags = tp->t_flags;
+       tcflag_t iflag  = t->c_iflag;
+       tcflag_t oflag  = t->c_oflag;
+       tcflag_t lflag  = t->c_lflag;
+       tcflag_t cflag  = t->c_cflag;
+
+       iflag &= ~(PARMRK | IGNPAR | IGNCR | INLCR);
+       if (flags & CRTERA) {
                lflag |= ECHOE;
-       else
+       } else {
                lflag &= ~ECHOE;
-       if (flags&CRTKIL)
+       }
+       if (flags & CRTKIL) {
                lflag |= ECHOKE;
-       else
+       } else {
                lflag &= ~ECHOKE;
-       if (flags&PRTERA)
+       }
+       if (flags & PRTERA) {
                lflag |= ECHOPRT;
-       else
+       } else {
                lflag &= ~ECHOPRT;
-       if (flags&CTLECH)
+       }
+       if (flags & CTLECH) {
                lflag |= ECHOCTL;
-       else
+       } else {
                lflag &= ~ECHOCTL;
-       if (flags&TANDEM)
+       }
+       if (flags & TANDEM) {
                iflag |= IXOFF;
-       else
+       } else {
                iflag &= ~IXOFF;
-       if ((flags&DECCTQ) == 0)
+       }
+       if ((flags & DECCTQ) == 0) {
                iflag |= IXANY;
-       else
+       } else {
                iflag &= ~IXANY;
-       if (flags & MDMBUF)
+       }
+       if (flags & MDMBUF) {
                cflag |= MDMBUF;
-       else
+       } else {
                cflag &= ~MDMBUF;
-       if (flags&NOHANG)
+       }
+       if (flags & NOHANG) {
                cflag &= ~HUPCL;
-       else
+       } else {
                cflag |= HUPCL;
-       lflag &= ~(TOSTOP|FLUSHO|PENDIN|NOFLSH);
-       lflag |= flags&(TOSTOP|FLUSHO|PENDIN|NOFLSH);
+       }
+       lflag &= ~(TOSTOP | FLUSHO | PENDIN | NOFLSH);
+       lflag |= flags & (TOSTOP | FLUSHO | PENDIN | NOFLSH);
 
        /*
         * The next if-else statement is copied from above so don't bother
@@ -719,20 +771,22 @@ ttcompatsetlflags(struct tty *tp, struct termios *t)
         * the change is not available here and skipping the RAW case would
         * make the code different from above.
         */
-       cflag &= ~(CSIZE|PARENB);
-       if (flags&(RAW|LITOUT|PASS8)) {
+       cflag &= ~(CSIZE | PARENB);
+       if (flags & (RAW | LITOUT | PASS8)) {
                cflag |= CS8;
-               if (!(flags&(RAW|PASS8))
-                   || (flags&(RAW|PASS8|ANYP)) == (PASS8|ANYP))
+               if (!(flags & (RAW | PASS8))
+                   || (flags & (RAW | PASS8 | ANYP)) == (PASS8 | ANYP)) {
                        iflag |= ISTRIP;
-               else
+               } else {
                        iflag &= ~ISTRIP;
-               if (flags&(RAW|LITOUT))
+               }
+               if (flags & (RAW | LITOUT)) {
                        oflag &= ~OPOST;
-               else
+               } else {
                        oflag |= OPOST;
+               }
        } else {
-               cflag |= CS7|PARENB;
+               cflag |= CS7 | PARENB;
                iflag |= ISTRIP;
                oflag |= OPOST;
        }
@@ -741,4 +795,3 @@ ttcompatsetlflags(struct tty *tp, struct termios *t)
        t->c_lflag = lflag;
        t->c_cflag = cflag;
 }
-#endif /* COMPAT_43_TTY || COMPAT_SUNOS */