termios.h
上传用户:szlgq88
上传日期:2009-04-28
资源大小:48287k
文件大小:2k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

  1. /* termios.h: generic termios/termio user copying/translation
  2.  */
  3. #ifndef _ASM_GENERIC_TERMIOS_H
  4. #define _ASM_GENERIC_TERMIOS_H
  5. #include <asm/uaccess.h>
  6. #ifndef __ARCH_TERMIO_GETPUT
  7. /*
  8.  * Translate a "termio" structure into a "termios". Ugh.
  9.  */
  10. static inline int user_termio_to_kernel_termios(struct termios *termios,
  11. struct termio __user *termio)
  12. {
  13. unsigned short tmp;
  14. if (get_user(tmp, &termio->c_iflag) < 0)
  15. goto fault;
  16. termios->c_iflag = (0xffff0000 & termios->c_iflag) | tmp;
  17. if (get_user(tmp, &termio->c_oflag) < 0)
  18. goto fault;
  19. termios->c_oflag = (0xffff0000 & termios->c_oflag) | tmp;
  20. if (get_user(tmp, &termio->c_cflag) < 0)
  21. goto fault;
  22. termios->c_cflag = (0xffff0000 & termios->c_cflag) | tmp;
  23. if (get_user(tmp, &termio->c_lflag) < 0)
  24. goto fault;
  25. termios->c_lflag = (0xffff0000 & termios->c_lflag) | tmp;
  26. if (get_user(termios->c_line, &termio->c_line) < 0)
  27. goto fault;
  28. if (copy_from_user(termios->c_cc, termio->c_cc, NCC) != 0)
  29. goto fault;
  30. return 0;
  31.  fault:
  32. return -EFAULT;
  33. }
  34. /*
  35.  * Translate a "termios" structure into a "termio". Ugh.
  36.  */
  37. static inline int kernel_termios_to_user_termio(struct termio __user *termio,
  38. struct termios *termios)
  39. {
  40. if (put_user(termios->c_iflag, &termio->c_iflag) < 0 ||
  41.     put_user(termios->c_oflag, &termio->c_oflag) < 0 ||
  42.     put_user(termios->c_cflag, &termio->c_cflag) < 0 ||
  43.     put_user(termios->c_lflag, &termio->c_lflag) < 0 ||
  44.     put_user(termios->c_line,  &termio->c_line) < 0 ||
  45.     copy_to_user(termio->c_cc, termios->c_cc, NCC) != 0)
  46. return -EFAULT;
  47. return 0;
  48. }
  49. #define user_termios_to_kernel_termios(k, u) copy_from_user(k, u, sizeof(struct termios))
  50. #define kernel_termios_to_user_termios(u, k) copy_to_user(u, k, sizeof(struct termios))
  51. #endif /* __ARCH_TERMIO_GETPUT */
  52. #endif /* _ASM_GENERIC_TERMIOS_H */