#include <linux/string.h>
#include <linux/slab.h>
#include <linux/poll.h>
+#include <linux/bitops.h>
#include <asm/uaccess.h>
#include <asm/system.h>
-#include <asm/bitops.h>
/* number of characters left in xmit buffer before select has we have room */
#define WAKEUP_CHARS 256
if (space < spaces)
return -1;
tty->column += spaces;
- tty->driver->write(tty, 0, " ", spaces);
+ tty->driver->write(tty, " ", spaces);
return 0;
}
tty->column += spaces;
*/
static ssize_t opost_block(struct tty_struct * tty,
- const unsigned char __user * inbuf, unsigned int nr)
+ const unsigned char * buf, unsigned int nr)
{
- char buf[80];
int space;
int i;
- char *cp;
+ const unsigned char *cp;
space = tty->driver->write_room(tty);
if (!space)
if (nr > sizeof(buf))
nr = sizeof(buf);
- if (copy_from_user(buf, inbuf, nr))
- return -EFAULT;
-
for (i = 0, cp = buf; i < nr; i++, cp++) {
switch (*cp) {
case '\n':
case '\r':
if (O_ONOCR(tty) && tty->column == 0)
goto break_out;
- if (O_OCRNL(tty)) {
- *cp = '\n';
- if (O_ONLRET(tty))
- tty->canon_column = tty->column = 0;
- break;
- }
+ if (O_OCRNL(tty))
+ goto break_out;
tty->canon_column = tty->column = 0;
break;
case '\t':
break;
default:
if (O_OLCUC(tty))
- *cp = toupper(*cp);
+ goto break_out;
if (!iscntrl(*cp))
tty->column++;
break;
break_out:
if (tty->driver->flush_chars)
tty->driver->flush_chars(tty);
- i = tty->driver->write(tty, 0, buf, i);
+ i = tty->driver->write(tty, buf, i);
return i;
}
*/
static ssize_t write_chan(struct tty_struct * tty, struct file * file,
- const unsigned char __user * buf, size_t nr)
+ const unsigned char * buf, size_t nr)
{
- const unsigned char __user *b = buf;
+ const unsigned char *b = buf;
DECLARE_WAITQUEUE(wait, current);
int c;
ssize_t retval = 0;
nr -= num;
if (nr == 0)
break;
- get_user(c, b);
+ c = *b;
if (opost(c, tty) < 0)
break;
b++; nr--;
if (tty->driver->flush_chars)
tty->driver->flush_chars(tty);
} else {
- c = tty->driver->write(tty, 1, b, nr);
+ c = tty->driver->write(tty, b, nr);
if (c < 0) {
retval = c;
goto break_out;