~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/arch/alpha/kernel/termios.c

Version: ~ [ linux-6.11-rc3 ] ~ [ linux-6.10.4 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.45 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.104 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.164 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.223 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.281 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.319 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.9 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 // SPDX-License-Identifier: GPL-2.0
  2 #include <linux/termios_internal.h>
  3 
  4 int user_termio_to_kernel_termios(struct ktermios *termios,
  5                                                 struct termio __user *termio)
  6 {
  7         struct termio v;
  8         bool canon;
  9 
 10         if (copy_from_user(&v, termio, sizeof(struct termio)))
 11                 return -EFAULT;
 12 
 13         termios->c_iflag = (0xffff0000 & termios->c_iflag) | v.c_iflag;
 14         termios->c_oflag = (0xffff0000 & termios->c_oflag) | v.c_oflag;
 15         termios->c_cflag = (0xffff0000 & termios->c_cflag) | v.c_cflag;
 16         termios->c_lflag = (0xffff0000 & termios->c_lflag) | v.c_lflag;
 17         termios->c_line = (0xffff0000 & termios->c_lflag) | v.c_line;
 18 
 19         canon = v.c_lflag & ICANON;
 20         termios->c_cc[VINTR]  = v.c_cc[_VINTR];
 21         termios->c_cc[VQUIT]  = v.c_cc[_VQUIT];
 22         termios->c_cc[VERASE] = v.c_cc[_VERASE];
 23         termios->c_cc[VKILL]  = v.c_cc[_VKILL];
 24         termios->c_cc[VEOL2]  = v.c_cc[_VEOL2];
 25         termios->c_cc[VSWTC]  = v.c_cc[_VSWTC];
 26         termios->c_cc[canon ? VEOF : VMIN]  = v.c_cc[_VEOF];
 27         termios->c_cc[canon ? VEOL : VTIME] = v.c_cc[_VEOL];
 28 
 29         return 0;
 30 }
 31 
 32 int kernel_termios_to_user_termio(struct termio __user *termio,
 33                                                 struct ktermios *termios)
 34 {
 35         struct termio v;
 36         bool canon;
 37 
 38         memset(&v, 0, sizeof(struct termio));
 39         v.c_iflag = termios->c_iflag;
 40         v.c_oflag = termios->c_oflag;
 41         v.c_cflag = termios->c_cflag;
 42         v.c_lflag = termios->c_lflag;
 43         v.c_line = termios->c_line;
 44 
 45         canon = v.c_lflag & ICANON;
 46         v.c_cc[_VINTR]  = termios->c_cc[VINTR];
 47         v.c_cc[_VQUIT]  = termios->c_cc[VQUIT];
 48         v.c_cc[_VERASE] = termios->c_cc[VERASE];
 49         v.c_cc[_VKILL]  = termios->c_cc[VKILL];
 50         v.c_cc[_VEOF]   = termios->c_cc[canon ? VEOF : VMIN];
 51         v.c_cc[_VEOL]   = termios->c_cc[canon ? VEOL : VTIME];
 52         v.c_cc[_VEOL2]  = termios->c_cc[VEOL2];
 53         v.c_cc[_VSWTC]  = termios->c_cc[VSWTC];
 54 
 55         return copy_to_user(termio, &v, sizeof(struct termio));
 56 }
 57 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php