LCOV - code coverage report
Current view: top level - include/asm-generic - termios.h (source / functions) Hit Total Coverage
Test: coverage.info Lines: 16 16 100.0 %
Date: 2014-02-18 Functions: 0 0 -
Branches: 13 24 54.2 %

           Branch data     Line data    Source code
       1                 :            : #ifndef _ASM_GENERIC_TERMIOS_H
       2                 :            : #define _ASM_GENERIC_TERMIOS_H
       3                 :            : 
       4                 :            : 
       5                 :            : #include <asm/uaccess.h>
       6                 :            : #include <uapi/asm-generic/termios.h>
       7                 :            : 
       8                 :            : /*      intr=^C         quit=^\         erase=del       kill=^U
       9                 :            :         eof=^D          vtime=\0        vmin=\1         sxtc=\0
      10                 :            :         start=^Q        stop=^S         susp=^Z         eol=\0
      11                 :            :         reprint=^R      discard=^U      werase=^W       lnext=^V
      12                 :            :         eol2=\0
      13                 :            : */
      14                 :            : #define INIT_C_CC "\003\034\177\025\004\0\1\0\021\023\032\0\022\017\027\026\0"
      15                 :            : 
      16                 :            : /*
      17                 :            :  * Translate a "termio" structure into a "termios". Ugh.
      18                 :            :  */
      19                 :            : static inline int user_termio_to_kernel_termios(struct ktermios *termios,
      20                 :            :                                                 const struct termio __user *termio)
      21                 :            : {
      22                 :            :         unsigned short tmp;
      23                 :            : 
      24         [ +  - ]:        131 :         if (get_user(tmp, &termio->c_iflag) < 0)
      25                 :            :                 goto fault;
      26                 :        131 :         termios->c_iflag = (0xffff0000 & termios->c_iflag) | tmp;
      27                 :            : 
      28         [ +  - ]:        131 :         if (get_user(tmp, &termio->c_oflag) < 0)
      29                 :            :                 goto fault;
      30                 :        131 :         termios->c_oflag = (0xffff0000 & termios->c_oflag) | tmp;
      31                 :            : 
      32         [ +  - ]:        131 :         if (get_user(tmp, &termio->c_cflag) < 0)
      33                 :            :                 goto fault;
      34                 :        131 :         termios->c_cflag = (0xffff0000 & termios->c_cflag) | tmp;
      35                 :            : 
      36         [ +  - ]:        131 :         if (get_user(tmp, &termio->c_lflag) < 0)
      37                 :            :                 goto fault;
      38                 :        131 :         termios->c_lflag = (0xffff0000 & termios->c_lflag) | tmp;
      39                 :            : 
      40         [ +  - ]:        131 :         if (get_user(termios->c_line, &termio->c_line) < 0)
      41                 :            :                 goto fault;
      42                 :            : 
      43         [ -  + ]:        131 :         if (copy_from_user(termios->c_cc, termio->c_cc, NCC) != 0)
      44                 :            :                 goto fault;
      45                 :            : 
      46                 :            :         return 0;
      47                 :            : 
      48                 :            :  fault:
      49                 :            :         return -EFAULT;
      50                 :            : }
      51                 :            : 
      52                 :            : /*
      53                 :            :  * Translate a "termios" structure into a "termio". Ugh.
      54                 :            :  */
      55                 :            : static inline int kernel_termios_to_user_termio(struct termio __user *termio,
      56                 :            :                                                 struct ktermios *termios)
      57                 :            : {
      58   [ +  +  +  - ]:        386 :         if (put_user(termios->c_iflag, &termio->c_iflag) < 0 ||
      59         [ +  - ]:        258 :             put_user(termios->c_oflag, &termio->c_oflag) < 0 ||
      60         [ +  - ]:        258 :             put_user(termios->c_cflag, &termio->c_cflag) < 0 ||
      61         [ +  - ]:        258 :             put_user(termios->c_lflag, &termio->c_lflag) < 0 ||
      62         [ -  + ]:        515 :             put_user(termios->c_line,  &termio->c_line) < 0 ||
      63                 :        129 :             copy_to_user(termio->c_cc, termios->c_cc, NCC) != 0)
      64                 :            :                 return -EFAULT;
      65                 :            : 
      66                 :            :         return 0;
      67                 :            : }
      68                 :            : 
      69                 :            : #ifdef TCGETS2
      70                 :            : static inline int user_termios_to_kernel_termios(struct ktermios *k,
      71                 :            :                                                  struct termios2 __user *u)
      72                 :            : {
      73                 :            :         return copy_from_user(k, u, sizeof(struct termios2));
      74                 :            : }
      75                 :            : 
      76                 :            : static inline int kernel_termios_to_user_termios(struct termios2 __user *u,
      77                 :            :                                                  struct ktermios *k)
      78                 :            : {
      79                 :            :         return copy_to_user(u, k, sizeof(struct termios2));
      80                 :            : }
      81                 :            : 
      82                 :            : static inline int user_termios_to_kernel_termios_1(struct ktermios *k,
      83                 :            :                                                    struct termios __user *u)
      84                 :            : {
      85                 :            :         return copy_from_user(k, u, sizeof(struct termios));
      86                 :            : }
      87                 :            : 
      88                 :            : static inline int kernel_termios_to_user_termios_1(struct termios __user *u,
      89                 :            :                                                    struct ktermios *k)
      90                 :            : {
      91                 :            :         return copy_to_user(u, k, sizeof(struct termios));
      92                 :            : }
      93                 :            : #else /* TCGETS2 */
      94                 :            : static inline int user_termios_to_kernel_termios(struct ktermios *k,
      95                 :            :                                                  struct termios __user *u)
      96                 :            : {
      97                 :            :         return copy_from_user(k, u, sizeof(struct termios));
      98                 :            : }
      99                 :            : 
     100                 :            : static inline int kernel_termios_to_user_termios(struct termios __user *u,
     101                 :            :                                                  struct ktermios *k)
     102                 :            : {
     103                 :            :         return copy_to_user(u, k, sizeof(struct termios));
     104                 :            : }
     105                 :            : #endif /* TCGETS2 */
     106                 :            : 
     107                 :            : #endif /* _ASM_GENERIC_TERMIOS_H */

Generated by: LCOV version 1.9