binfmt_misc: use simple_read_from_buffer()
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>
This commit is contained in:
Родитель
76a6f3dc9a
Коммит
6e2c10a12a
|
@ -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;
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче