binfmt_misc: use simple_read_from_buffer()
authorAkinobu Mita <akinobu.mita@gmail.com>
Thu, 24 Jul 2008 04:29:15 +0000 (21:29 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Thu, 24 Jul 2008 17:47:27 +0000 (10:47 -0700)
Signed-off-by: Akinobu Mita <akinobu.mita@gmail.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
fs/binfmt_misc.c

index 7191306367c5d11912ceed01c5fce4925b528eba..756205314c24401fc31ebbb6eb7c479aa4c92145 100644 (file)
@@ -27,6 +27,7 @@
 #include <linux/namei.h>
 #include <linux/mount.h>
 #include <linux/syscalls.h>
+#include <linux/fs.h>
 
 #include <asm/uaccess.h>
 
@@ -535,31 +536,16 @@ static ssize_t
 bm_entry_read(struct file * file, char __user * buf, size_t nbytes, loff_t *ppos)
 {
        Node *e = file->f_path.dentry->d_inode->i_private;
-       loff_t pos = *ppos;
        ssize_t res;
        char *page;
-       int len;
 
        if (!(page = (char*) __get_free_page(GFP_KERNEL)))
                return -ENOMEM;
 
        entry_status(e, page);
-       len = strlen(page);
 
-       res = -EINVAL;
-       if (pos < 0)
-               goto out;
-       res = 0;
-       if (pos >= len)
-               goto out;
-       if (len < pos + nbytes)
-               nbytes = len - pos;
-       res = -EFAULT;
-       if (copy_to_user(buf, page + pos, nbytes))
-               goto out;
-       *ppos = pos + nbytes;
-       res = nbytes;
-out:
+       res = simple_read_from_buffer(buf, nbytes, ppos, page, strlen(page));
+
        free_page((unsigned long) page);
        return res;
 }