Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 83734
b: refs/heads/master
c: f8a4c3b
h: refs/heads/master
v: v3
  • Loading branch information
Dave Miller authored and Linus Torvalds committed Feb 7, 2008
1 parent 57ff236 commit 86c36d4
Show file tree
Hide file tree
Showing 2 changed files with 46 additions and 30 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 94b3e03c875f25c19ede9600c66d74a30b81957d
refs/heads/master: f8a4c3b5250496f072d9098a641fd5642146d999
74 changes: 45 additions & 29 deletions trunk/include/asm-x86/termios.h
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,8 @@ struct termio {

#ifdef __KERNEL__

#include <asm/uaccess.h>

/* intr=^C quit=^\ erase=del kill=^U
eof=^D vtime=\0 vmin=\1 sxtc=\0
start=^Q stop=^S susp=^Z eol=\0
Expand All @@ -58,39 +60,53 @@ struct termio {
*(unsigned short *) &(termios)->x = __tmp; \
}

#define user_termio_to_kernel_termios(termios, termio) \
({ \
SET_LOW_TERMIOS_BITS(termios, termio, c_iflag); \
SET_LOW_TERMIOS_BITS(termios, termio, c_oflag); \
SET_LOW_TERMIOS_BITS(termios, termio, c_cflag); \
SET_LOW_TERMIOS_BITS(termios, termio, c_lflag); \
copy_from_user((termios)->c_cc, (termio)->c_cc, NCC); \
})
static inline int user_termio_to_kernel_termios(struct ktermios *termios,
struct termio __user *termio)
{
SET_LOW_TERMIOS_BITS(termios, termio, c_iflag);
SET_LOW_TERMIOS_BITS(termios, termio, c_oflag);
SET_LOW_TERMIOS_BITS(termios, termio, c_cflag);
SET_LOW_TERMIOS_BITS(termios, termio, c_lflag);
return copy_from_user(termios->c_cc, termio->c_cc, NCC);
}

/*
* Translate a "termios" structure into a "termio". Ugh.
*/
#define kernel_termios_to_user_termio(termio, termios) \
({ \
put_user((termios)->c_iflag, &(termio)->c_iflag); \
put_user((termios)->c_oflag, &(termio)->c_oflag); \
put_user((termios)->c_cflag, &(termio)->c_cflag); \
put_user((termios)->c_lflag, &(termio)->c_lflag); \
put_user((termios)->c_line, &(termio)->c_line); \
copy_to_user((termio)->c_cc, (termios)->c_cc, NCC); \
})

#define user_termios_to_kernel_termios(k, u) \
copy_from_user(k, u, sizeof(struct termios2))

#define kernel_termios_to_user_termios(u, k) \
copy_to_user(u, k, sizeof(struct termios2))

#define user_termios_to_kernel_termios_1(k, u) \
copy_from_user(k, u, sizeof(struct termios))

#define kernel_termios_to_user_termios_1(u, k) \
copy_to_user(u, k, sizeof(struct termios))
static inline int kernel_termios_to_user_termio(struct termio __user *termio,
struct ktermios *termios)
{
put_user((termios)->c_iflag, &(termio)->c_iflag);
put_user((termios)->c_oflag, &(termio)->c_oflag);
put_user((termios)->c_cflag, &(termio)->c_cflag);
put_user((termios)->c_lflag, &(termio)->c_lflag);
put_user((termios)->c_line, &(termio)->c_line);
return copy_to_user((termio)->c_cc, (termios)->c_cc, NCC);
}

static inline int user_termios_to_kernel_termios(struct ktermios *k,
struct termios2 __user *u)
{
return copy_from_user(k, u, sizeof(struct termios2));
}

static inline int kernel_termios_to_user_termios(struct termios2 __user *u,
struct ktermios *k)
{
return copy_to_user(u, k, sizeof(struct termios2));
}

static inline int user_termios_to_kernel_termios_1(struct ktermios *k,
struct termios __user *u)
{
return copy_from_user(k, u, sizeof(struct termios));
}

static inline int kernel_termios_to_user_termios_1(struct termios __user *u,
struct ktermios *k)
{
return copy_to_user(u, k, sizeof(struct termios));
}

#endif /* __KERNEL__ */

Expand Down

0 comments on commit 86c36d4

Please sign in to comment.