update to 2.6.9-rc1
[linux-flexiantxendom0-3.2.10.git] / arch / um / drivers / xterm.c
index e33cae3..59c4ba8 100644 (file)
@@ -8,6 +8,7 @@
 #include <unistd.h>
 #include <string.h>
 #include <errno.h>
+#include <fcntl.h>
 #include <termios.h>
 #include <signal.h>
 #include <sched.h>
@@ -35,8 +36,7 @@ void *xterm_init(char *str, int device, struct chan_opts *opts)
 {
        struct xterm_chan *data;
 
-       data = malloc(sizeof(*data));
-       if(data == NULL) return(NULL);
+       if((data = malloc(sizeof(*data))) == NULL) return(NULL);
        *data = ((struct xterm_chan) { .pid             = -1, 
                                       .helper_pid      = -1,
                                       .device          = device, 
@@ -83,7 +83,6 @@ __uml_setup("xterm=", xterm_setup,
 "    are 'xterm=gnome-terminal,-t,-x'.\n\n"
 );
 
-/* XXX This badly needs some cleaning up in the error paths */
 int xterm_open(int input, int output, int primary, void *d, char **dev_out)
 {
        struct xterm_chan *data = d;
@@ -94,7 +93,7 @@ int xterm_open(int input, int output, int primary, void *d, char **dev_out)
                         "/usr/lib/uml/port-helper", "-uml-socket",
                         file, NULL };
 
-       if(os_access(argv[4], OS_ACC_X_OK) < 0)
+       if(access(argv[4], X_OK))
                argv[4] = "port-helper";
 
        fd = mkstemp(file);
@@ -107,13 +106,13 @@ int xterm_open(int input, int output, int primary, void *d, char **dev_out)
                printk("xterm_open : unlink failed, errno = %d\n", errno);
                return(-errno);
        }
-       os_close_file(fd);
+       close(fd);
 
-       fd = os_create_unix_socket(file, sizeof(file), 1);
+       fd = create_unix_socket(file, sizeof(file));
        if(fd < 0){
                printk("xterm_open : create_unix_socket failed, errno = %d\n", 
                       -fd);
-               return(fd);
+               return(-fd);
        }
 
        sprintf(title, data->title, data->device);
@@ -126,35 +125,23 @@ int xterm_open(int input, int output, int primary, void *d, char **dev_out)
 
        if(data->stack == 0) free_stack(stack, 0);
 
-       if (data->direct_rcv) {
+       if(data->direct_rcv)
                new = os_rcv_fd(fd, &data->helper_pid);
-       } else {
-               err = os_set_fd_block(fd, 0);
-               if(err < 0){
+       else {
+               if((err = os_set_fd_block(fd, 0)) != 0){
                        printk("xterm_open : failed to set descriptor "
-                              "non-blocking, err = %d\n", -err);
+                              "non-blocking, errno = %d\n", err);
                        return(err);
                }
                new = xterm_fd(fd, &data->helper_pid);
        }
        if(new < 0){
-               printk("xterm_open : os_rcv_fd failed, err = %d\n", -new);
+               printk("xterm_open : os_rcv_fd failed, errno = %d\n", -new);
                goto out;
        }
 
-       CATCH_EINTR(err = tcgetattr(new, &data->tt));
-       if(err){
-               new = err;
-               goto out;
-       }
-
-       if(data->raw){
-               err = raw(new);
-               if(err){
-                       new = err;
-                       goto out;
-               }
-       }
+       tcgetattr(new, &data->tt);
+       if(data->raw) raw(new, 0);
 
        data->pid = pid;
        *dev_out = NULL;
@@ -173,7 +160,7 @@ void xterm_close(int fd, void *d)
        if(data->helper_pid != -1) 
                os_kill_process(data->helper_pid, 0);
        data->helper_pid = -1;
-       os_close_file(fd);
+       close(fd);
 }
 
 void xterm_free(void *d)