Revert to Fedora kernel-2.6.17-1.2187_FC5 patched with vs2.0.2.1; there are too many...
[linux-2.6.git] / arch / um / os-Linux / file.c
index 4083bf9..0925133 100644 (file)
@@ -46,7 +46,7 @@ int os_stat_fd(const int fd, struct uml_stat *ubuf)
                err = fstat64(fd, &sbuf);
        } while((err < 0) && (errno == EINTR)) ;
 
-       if(err < 0) 
+       if(err < 0)
                return(-errno);
 
        if(ubuf != NULL)
@@ -63,7 +63,7 @@ int os_stat_file(const char *file_name, struct uml_stat *ubuf)
                err = stat64(file_name, &sbuf);
        } while((err < 0) && (errno == EINTR)) ;
 
-       if(err < 0) 
+       if(err < 0)
                return(-errno);
 
        if(ubuf != NULL)
@@ -119,15 +119,11 @@ int os_window_size(int fd, int *rows, int *cols)
 
 int os_new_tty_pgrp(int fd, int pid)
 {
-       if(ioctl(fd, TIOCSCTTY, 0) < 0){
-               printk("TIOCSCTTY failed, errno = %d\n", errno);
-               return(-errno);
-       }
+       if(ioctl(fd, TIOCSCTTY, 0) < 0)
+               return -errno;
 
-       if(tcsetpgrp(fd, pid) < 0){
-               printk("tcsetpgrp failed, errno = %d\n", errno);
-               return(-errno);
-       }
+       if(tcsetpgrp(fd, pid) < 0)
+               return -errno;
 
        return(0);
 }
@@ -146,18 +142,12 @@ int os_set_slip(int fd)
        int disc, sencap;
 
        disc = N_SLIP;
-       if(ioctl(fd, TIOCSETD, &disc) < 0){
-               printk("Failed to set slip line discipline - "
-                      "errno = %d\n", errno);
-               return(-errno);
-       }
+       if(ioctl(fd, TIOCSETD, &disc) < 0)
+               return -errno;
 
        sencap = 0;
-       if(ioctl(fd, SIOCSIFENCAP, &sencap) < 0){
-               printk("Failed to set slip encapsulation - "
-                      "errno = %d\n", errno);
-               return(-errno);
-       }
+       if(ioctl(fd, SIOCSIFENCAP, &sencap) < 0)
+               return -errno;
 
        return(0);
 }
@@ -174,27 +164,21 @@ int os_set_owner(int fd, int pid)
        return(0);
 }
 
-/* FIXME? moved wholesale from sigio_user.c to get fcntls out of that file */ 
+/* FIXME? moved wholesale from sigio_user.c to get fcntls out of that file */
 int os_sigio_async(int master, int slave)
 {
        int flags;
 
        flags = fcntl(master, F_GETFL);
-       if(flags < 0) {
-               printk("fcntl F_GETFL failed, errno = %d\n", errno);
-               return(-errno);
-       }
+       if(flags < 0)
+               return -errno;
 
        if((fcntl(master, F_SETFL, flags | O_NONBLOCK | O_ASYNC) < 0) ||
-          (fcntl(master, F_SETOWN, os_getpid()) < 0)){
-               printk("fcntl F_SETFL or F_SETOWN failed, errno = %d\n", errno);
-               return(-errno);
-       }
+          (fcntl(master, F_SETOWN, os_getpid()) < 0))
+               return -errno;
 
-       if((fcntl(slave, F_SETFL, flags | O_NONBLOCK) < 0)){
-               printk("fcntl F_SETFL failed, errno = %d\n", errno);
-               return(-errno);
-       }
+       if((fcntl(slave, F_SETFL, flags | O_NONBLOCK) < 0))
+               return -errno;
 
        return(0);
 }
@@ -254,7 +238,7 @@ int os_file_mode(char *file, struct openflags *mode_out)
 
 int os_open_file(char *file, struct openflags flags, int mode)
 {
-       int fd, f = 0;
+       int fd, err, f = 0;
 
        if(flags.r && flags.w) f = O_RDWR;
        else if(flags.r) f = O_RDONLY;
@@ -271,8 +255,9 @@ int os_open_file(char *file, struct openflags flags, int mode)
                return(-errno);
 
        if(flags.cl && fcntl(fd, F_SETFD, 1)){
+               err = -errno;
                os_close_file(fd);
-               return(-errno);
+               return err;
        }
 
        return(fd);
@@ -287,14 +272,23 @@ int os_connect_socket(char *name)
        snprintf(sock.sun_path, sizeof(sock.sun_path), "%s", name);
 
        fd = socket(AF_UNIX, SOCK_STREAM, 0);
-       if(fd < 0)
-               return(fd);
+       if(fd < 0) {
+               err = -errno;
+               goto out;
+       }
 
        err = connect(fd, (struct sockaddr *) &sock, sizeof(sock));
-       if(err)
-               return(-errno);
+       if(err) {
+               err = -errno;
+               goto out_close;
+       }
 
-       return(fd);
+       return fd;
+
+out_close:
+       close(fd);
+out:
+       return err;
 }
 
 void os_close_file(int fd)
@@ -307,11 +301,12 @@ int os_seek_file(int fd, __u64 offset)
        __u64 actual;
 
        actual = lseek64(fd, offset, SEEK_SET);
-       if(actual != offset) return(-errno);
+       if(actual != offset)
+               return(-errno);
        return(0);
 }
 
-static int fault_buffer(void *start, int len, 
+static int fault_buffer(void *start, int len,
                        int (*copy_proc)(void *addr, void *buf, int len))
 {
        int page = getpagesize(), i;
@@ -351,17 +346,17 @@ static int file_io(int fd, void *buf, int len,
 
 int os_read_file(int fd, void *buf, int len)
 {
-       return(file_io(fd, buf, len, (int (*)(int, void *, int)) read, 
+       return(file_io(fd, buf, len, (int (*)(int, void *, int)) read,
                       copy_from_user_proc));
 }
 
 int os_write_file(int fd, const void *buf, int len)
 {
-       return(file_io(fd, (void *) buf, len, 
+       return(file_io(fd, (void *) buf, len,
                       (int (*)(int, void *, int)) write, copy_to_user_proc));
 }
 
-int os_file_size(char *file, long long *size_out)
+int os_file_size(char *file, unsigned long long *size_out)
 {
        struct uml_stat buf;
        int err;
@@ -381,9 +376,9 @@ int os_file_size(char *file, long long *size_out)
                        return(fd);
                }
                if(ioctl(fd, BLKGETSIZE, &blocks) < 0){
+                       err = -errno;
                        printk("Couldn't get the block size of \"%s\", "
                               "errno = %d\n", file, errno);
-                       err = -errno;
                        os_close_file(fd);
                        return(err);
                }
@@ -446,7 +441,7 @@ int os_pipe(int *fds, int stream, int close_on_exec)
        int err, type = stream ? SOCK_STREAM : SOCK_DGRAM;
 
        err = socketpair(AF_UNIX, type, 0, fds);
-       if(err < 0) 
+       if(err < 0)
                return(-errno);
 
        if(!close_on_exec)
@@ -471,11 +466,14 @@ int os_pipe(int *fds, int stream, int close_on_exec)
 
 int os_set_fd_async(int fd, int owner)
 {
+       int err;
+
        /* XXX This should do F_GETFL first */
        if(fcntl(fd, F_SETFL, O_ASYNC | O_NONBLOCK) < 0){
+               err = -errno;
                printk("os_set_fd_async : failed to set O_ASYNC and "
                       "O_NONBLOCK on fd # %d, errno = %d\n", fd, errno);
-               return(-errno);
+               return err;
        }
 #ifdef notdef
        if(fcntl(fd, F_SETFD, 1) < 0){
@@ -486,15 +484,26 @@ int os_set_fd_async(int fd, int owner)
 
        if((fcntl(fd, F_SETSIG, SIGIO) < 0) ||
           (fcntl(fd, F_SETOWN, owner) < 0)){
+               err = -errno;
                printk("os_set_fd_async : Failed to fcntl F_SETOWN "
                       "(or F_SETSIG) fd %d to pid %d, errno = %d\n", fd, 
                       owner, errno);
-               return(-errno);
+               return err;
        }
 
        return(0);
 }
 
+int os_clear_fd_async(int fd)
+{
+       int flags = fcntl(fd, F_GETFL);
+
+       flags &= ~(O_ASYNC | O_NONBLOCK);
+       if(fcntl(fd, F_SETFL, flags) < 0)
+               return(-errno);
+       return(0);
+}
+
 int os_set_fd_block(int fd, int blocking)
 {
        int flags;
@@ -504,11 +513,9 @@ int os_set_fd_block(int fd, int blocking)
        if(blocking) flags &= ~O_NONBLOCK;
        else flags |= O_NONBLOCK;
 
-       if(fcntl(fd, F_SETFL, flags) < 0){
-               printk("Failed to change blocking on fd # %d, errno = %d\n",
-                      fd, errno);
-               return(-errno);
-       }
+       if(fcntl(fd, F_SETFL, flags) < 0)
+               return -errno;
+
        return(0);
 }
 
@@ -597,11 +604,8 @@ int os_create_unix_socket(char *file, int len, int close_on_exec)
        int sock, err;
 
        sock = socket(PF_UNIX, SOCK_DGRAM, 0);
-       if (sock < 0){
-               printk("create_unix_socket - socket failed, errno = %d\n",
-                      errno);
-               return(-errno);
-       }
+       if(sock < 0)
+               return -errno;
 
        if(close_on_exec) {
                err = os_set_exec_close(sock, 1);
@@ -616,11 +620,8 @@ int os_create_unix_socket(char *file, int len, int close_on_exec)
        snprintf(addr.sun_path, len, "%s", file);
 
        err = bind(sock, (struct sockaddr *) &addr, sizeof(addr));
-       if (err < 0){
-               printk("create_listening_socket at '%s' - bind failed, "
-                      "errno = %d\n", file, errno);
-               return(-errno);
-       }
+       if(err < 0)
+               return -errno;
 
        return(sock);
 }