]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - arch/um/os-Linux/file.c
uml: miscellaneous code cleanups
[linux-2.6-omap-h63xx.git] / arch / um / os-Linux / file.c
index 5e9b8dcf34d4748acf06416ea22e3b278a3835ff..4f547d75b17eae81fd88fece0819957ddaa8e8a4 100644 (file)
@@ -17,9 +17,8 @@
 #include <sys/uio.h>
 #include "os.h"
 #include "user.h"
-#include "kern_util.h"
 
-static void copy_stat(struct uml_stat *dst, struct stat64 *src)
+static void copy_stat(struct uml_stat *dst, const struct stat64 *src)
 {
        *dst = ((struct uml_stat) {
                .ust_dev     = src->st_dev,     /* device */
@@ -82,13 +81,6 @@ int os_access(const char* file, int mode)
        return 0;
 }
 
-void os_print_error(int error, const char* str)
-{
-       errno = error < 0 ? -error : error;
-
-       perror(str);
-}
-
 /* FIXME? required only by hostaudio (because it passes ioctls verbatim) */
 int os_ioctl_generic(int fd, unsigned int cmd, unsigned long arg)
 {
@@ -101,30 +93,6 @@ int os_ioctl_generic(int fd, unsigned int cmd, unsigned long arg)
        return err;
 }
 
-int os_window_size(int fd, int *rows, int *cols)
-{
-       struct winsize size;
-
-       if(ioctl(fd, TIOCGWINSZ, &size) < 0)
-               return -errno;
-
-       *rows = size.ws_row;
-       *cols = size.ws_col;
-
-       return 0;
-}
-
-int os_new_tty_pgrp(int fd, int pid)
-{
-       if(ioctl(fd, TIOCSCTTY, 0) < 0)
-               return -errno;
-
-       if(tcsetpgrp(fd, pid) < 0)
-               return -errno;
-
-       return 0;
-}
-
 /* FIXME: ensure namebuf in os_get_if_name is big enough */
 int os_get_ifname(int fd, char* namebuf)
 {
@@ -199,28 +167,28 @@ int os_file_type(char *file)
        else return OS_TYPE_FILE;
 }
 
-int os_file_mode(char *file, struct openflags *mode_out)
+int os_file_mode(const char *file, struct openflags *mode_out)
 {
        int err;
 
        *mode_out = OPENFLAGS();
 
-       err = os_access(file, OS_ACC_W_OK);
-       if((err < 0) && (err != -EACCES))
-               return(err);
-
-       *mode_out = of_write(*mode_out);
-
-       err = os_access(file, OS_ACC_R_OK);
-       if((err < 0) && (err != -EACCES))
-               return(err);
+       err = access(file, W_OK);
+       if(err && (errno != EACCES))
+               return -errno;
+       else if(!err)
+               *mode_out = of_write(*mode_out);
 
-       *mode_out = of_read(*mode_out);
+       err = access(file, R_OK);
+       if(err && (errno != EACCES))
+               return -errno;
+       else if(!err)
+               *mode_out = of_read(*mode_out);
 
-       return(0);
+       return err;
 }
 
-int os_open_file(char *file, struct openflags flags, int mode)
+int os_open_file(const char *file, struct openflags flags, int mode)
 {
        int fd, err, f = 0;
 
@@ -236,18 +204,18 @@ int os_open_file(char *file, struct openflags flags, int mode)
 
        fd = open64(file, f, mode);
        if(fd < 0)
-               return(-errno);
+               return -errno;
 
        if(flags.cl && fcntl(fd, F_SETFD, 1)){
                err = -errno;
-               os_close_file(fd);
+               close(fd);
                return err;
        }
 
-       return(fd);
+       return fd;
 }
 
-int os_connect_socket(char *name)
+int os_connect_socket(const char *name)
 {
        struct sockaddr_un sock;
        int fd, err;
@@ -280,9 +248,9 @@ void os_close_file(int fd)
        close(fd);
 }
 
-int os_seek_file(int fd, __u64 offset)
+int os_seek_file(int fd, unsigned long long offset)
 {
-       __u64 actual;
+       unsigned long long actual;
 
        actual = lseek64(fd, offset, SEEK_SET);
        if(actual != offset)
@@ -290,51 +258,7 @@ int os_seek_file(int fd, __u64 offset)
        return 0;
 }
 
-static int fault_buffer(void *start, int len,
-                       int (*copy_proc)(void *addr, void *buf, int len))
-{
-       int page = getpagesize(), i;
-       char c;
-
-       for(i = 0; i < len; i += page){
-               if((*copy_proc)(start + i, &c, sizeof(c)))
-                       return -EFAULT;
-       }
-       if((len % page) != 0){
-               if((*copy_proc)(start + len - 1, &c, sizeof(c)))
-                       return -EFAULT;
-       }
-       return 0;
-}
-
-static int file_io(int fd, void *buf, int len,
-                  int (*io_proc)(int fd, void *buf, int len),
-                  int (*copy_user_proc)(void *addr, void *buf, int len))
-{
-       int n, err;
-
-       do {
-               n = (*io_proc)(fd, buf, len);
-               if((n < 0) && (errno == EFAULT)){
-                       err = fault_buffer(buf, len, copy_user_proc);
-                       if(err)
-                               return err;
-                       n = (*io_proc)(fd, buf, len);
-               }
-       } while((n < 0) && (errno == EINTR));
-
-       if(n < 0)
-               return -errno;
-       return n;
-}
-
 int os_read_file(int fd, void *buf, int len)
-{
-       return file_io(fd, buf, len, (int (*)(int, void *, int)) read,
-                      copy_from_user_proc);
-}
-
-int os_read_file_k(int fd, void *buf, int len)
 {
        int n = read(fd, buf, len);
 
@@ -344,12 +268,6 @@ int os_read_file_k(int fd, void *buf, int len)
 }
 
 int os_write_file(int fd, const void *buf, int len)
-{
-       return file_io(fd, (void *) buf, len,
-                      (int (*)(int, void *, int)) write, copy_to_user_proc);
-}
-
-int os_write_file_k(int fd, const void *buf, int len)
 {
        int n = write(fd, (void *) buf, len);
 
@@ -358,7 +276,7 @@ int os_write_file_k(int fd, const void *buf, int len)
        return n;
 }
 
-int os_file_size(char *file, unsigned long long *size_out)
+int os_file_size(const char *file, unsigned long long *size_out)
 {
        struct uml_stat buf;
        int err;
@@ -366,33 +284,36 @@ int os_file_size(char *file, unsigned long long *size_out)
        err = os_stat_file(file, &buf);
        if(err < 0){
                printk("Couldn't stat \"%s\" : err = %d\n", file, -err);
-               return(err);
+               return err;
        }
 
        if(S_ISBLK(buf.ust_mode)){
-               int fd, blocks;
+               int fd;
+               long blocks;
 
-               fd = os_open_file(file, of_read(OPENFLAGS()), 0);
-               if(fd < 0){
-                       printk("Couldn't open \"%s\", errno = %d\n", file, -fd);
-                       return(fd);
+               fd = open(file, O_RDONLY, 0);
+               if(fd < 0) {
+                       err = -errno;
+                       printk("Couldn't open \"%s\", errno = %d\n", file,
+                              errno);
+                       return err;
                }
                if(ioctl(fd, BLKGETSIZE, &blocks) < 0){
                        err = -errno;
                        printk("Couldn't get the block size of \"%s\", "
                               "errno = %d\n", file, errno);
-                       os_close_file(fd);
-                       return(err);
+                       close(fd);
+                       return err;
                }
                *size_out = ((long long) blocks) * 512;
-               os_close_file(fd);
-               return(0);
+               close(fd);
        }
-       *size_out = buf.ust_size;
-       return(0);
+       else *size_out = buf.ust_size;
+
+       return 0;
 }
 
-int os_file_modtime(char *file, unsigned long *modtime)
+int os_file_modtime(const char *file, unsigned long *modtime)
 {
        struct uml_stat buf;
        int err;
@@ -407,35 +328,15 @@ int os_file_modtime(char *file, unsigned long *modtime)
        return 0;
 }
 
-int os_get_exec_close(int fd, int* close_on_exec)
-{
-       int ret;
-
-       do {
-               ret = fcntl(fd, F_GETFD);
-       } while((ret < 0) && (errno == EINTR)) ;
-
-       if(ret < 0)
-               return(-errno);
-
-       *close_on_exec = (ret&FD_CLOEXEC) ? 1 : 0;
-       return(ret);
-}
-
-int os_set_exec_close(int fd, int close_on_exec)
+int os_set_exec_close(int fd)
 {
-       int flag, err;
-
-       if(close_on_exec) flag = FD_CLOEXEC;
-       else flag = 0;
+       int err;
 
-       do {
-               err = fcntl(fd, F_SETFD, flag);
-       } while((err < 0) && (errno == EINTR)) ;
+       CATCH_EINTR(err = fcntl(fd, F_SETFD, FD_CLOEXEC));
 
        if(err < 0)
-               return(-errno);
-       return(err);
+               return -errno;
+       return err;
 }
 
 int os_pipe(int *fds, int stream, int close_on_exec)
@@ -444,16 +345,16 @@ int os_pipe(int *fds, int stream, int close_on_exec)
 
        err = socketpair(AF_UNIX, type, 0, fds);
        if(err < 0)
-               return(-errno);
+               return -errno;
 
        if(!close_on_exec)
-               return(0);
+               return 0;
 
-       err = os_set_exec_close(fds[0], 1);
+       err = os_set_exec_close(fds[0]);
        if(err < 0)
                goto error;
 
-       err = os_set_exec_close(fds[1], 1);
+       err = os_set_exec_close(fds[1]);
        if(err < 0)
                goto error;
 
@@ -461,35 +362,32 @@ int os_pipe(int *fds, int stream, int close_on_exec)
 
  error:
        printk("os_pipe : Setting FD_CLOEXEC failed, err = %d\n", -err);
-       os_close_file(fds[1]);
-       os_close_file(fds[0]);
-       return(err);
+       close(fds[1]);
+       close(fds[0]);
+       return err;
 }
 
-int os_set_fd_async(int fd, int owner)
+int os_set_fd_async(int fd)
 {
-       int err;
+       int err, flags;
 
-       /* XXX This should do F_GETFL first */
-       if(fcntl(fd, F_SETFL, O_ASYNC | O_NONBLOCK) < 0){
+       flags = fcntl(fd, F_GETFL);
+       if (flags < 0)
+               return -errno;
+
+       flags |= O_ASYNC | O_NONBLOCK;
+       if (fcntl(fd, F_SETFL, flags) < 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 err;
        }
-#ifdef notdef
-       if(fcntl(fd, F_SETFD, 1) < 0){
-               printk("os_set_fd_async : Setting FD_CLOEXEC failed, "
-                      "errno = %d\n", errno);
-       }
-#endif
 
-       if((fcntl(fd, F_SETSIG, SIGIO) < 0) ||
-          (fcntl(fd, F_SETOWN, owner) < 0)){
+       if ((fcntl(fd, F_SETSIG, SIGIO) < 0) ||
+           (fcntl(fd, F_SETOWN, os_getpid()) < 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);
+                      "(or F_SETSIG) fd %d, errno = %d\n", fd, errno);
                return err;
        }
 
@@ -581,8 +479,7 @@ int os_rcv_fd(int fd, int *helper_pid_out)
        n = recvmsg(fd, &msg, 0);
        if(n < 0)
                return -errno;
-
-       else if(n != sizeof(iov.iov_len))
+       else if(n != iov.iov_len)
                *helper_pid_out = -1;
 
        cmsg = CMSG_FIRSTHDR(&msg);
@@ -600,7 +497,7 @@ int os_rcv_fd(int fd, int *helper_pid_out)
        return new;
 }
 
-int os_create_unix_socket(char *file, int len, int close_on_exec)
+int os_create_unix_socket(const char *file, int len, int close_on_exec)
 {
        struct sockaddr_un addr;
        int sock, err;
@@ -610,7 +507,7 @@ int os_create_unix_socket(char *file, int len, int close_on_exec)
                return -errno;
 
        if(close_on_exec) {
-               err = os_set_exec_close(sock, 1);
+               err = os_set_exec_close(sock);
                if(err < 0)
                        printk("create_unix_socket : close_on_exec failed, "
                       "err = %d", -err);