vserver 1.9.3
[linux-2.6.git] / arch / um / drivers / tty.c
index e9eb9e3..dd008aa 100644 (file)
@@ -5,7 +5,6 @@
 
 #include <stdio.h>
 #include <termios.h>
-#include <fcntl.h>
 #include <errno.h>
 #include <unistd.h>
 #include "chan_user.h"
@@ -30,7 +29,8 @@ void *tty_chan_init(char *str, int device, struct chan_opts *opts)
        }
        str++;
 
-       if((data = um_kmalloc(sizeof(*data))) == NULL) 
+       data = um_kmalloc(sizeof(*data));
+       if(data == NULL)
                return(NULL);
        *data = ((struct tty_chan) { .dev       = str,
                                     .raw       = opts->raw });
@@ -41,13 +41,18 @@ void *tty_chan_init(char *str, int device, struct chan_opts *opts)
 int tty_open(int input, int output, int primary, void *d, char **dev_out)
 {
        struct tty_chan *data = d;
-       int fd;
+       int fd, err;
 
        fd = os_open_file(data->dev, of_set_rw(OPENFLAGS(), input, output), 0);
        if(fd < 0) return(fd);
        if(data->raw){
-               tcgetattr(fd, &data->tt);
-               raw(fd, 0);
+               CATCH_EINTR(err = tcgetattr(fd, &data->tt));
+               if(err)
+                       return(err);
+
+               err = raw(fd);
+               if(err)
+                       return(err);
        }
 
        *dev_out = data->dev;