From ac800cda50dc96c830175e8384dd58147403be6c Mon Sep 17 00:00:00 2001 From: Akinobu Mita Date: Fri, 25 Jul 2008 01:48:07 -0700 Subject: [PATCH] --- yaml --- r: 105969 b: refs/heads/master c: f1a43f93f0f3bab418800eaccb9e2e3b5427e173 h: refs/heads/master i: 105967: d6c4c15239e103e7144fd3aed1119c9afcbcaa05 v: v3 --- [refs] | 2 +- trunk/ipc/mqueue.c | 25 +++++++------------------ 2 files changed, 8 insertions(+), 19 deletions(-) diff --git a/[refs] b/[refs] index f912d7bf6db5..9e2ffcb7574e 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 380af1b33b3ff92df5cda96329b58f5d1b6b5a53 +refs/heads/master: f1a43f93f0f3bab418800eaccb9e2e3b5427e173 diff --git a/trunk/ipc/mqueue.c b/trunk/ipc/mqueue.c index 3e84b958186b..1fdc2eb2f6d8 100644 --- a/trunk/ipc/mqueue.c +++ b/trunk/ipc/mqueue.c @@ -314,15 +314,11 @@ static int mqueue_unlink(struct inode *dir, struct dentry *dentry) * through std routines) */ static ssize_t mqueue_read_file(struct file *filp, char __user *u_data, - size_t count, loff_t * off) + size_t count, loff_t *off) { struct mqueue_inode_info *info = MQUEUE_I(filp->f_path.dentry->d_inode); char buffer[FILENT_SIZE]; - size_t slen; - loff_t o; - - if (!count) - return 0; + ssize_t ret; spin_lock(&info->lock); snprintf(buffer, sizeof(buffer), @@ -335,21 +331,14 @@ static ssize_t mqueue_read_file(struct file *filp, char __user *u_data, pid_vnr(info->notify_owner)); spin_unlock(&info->lock); buffer[sizeof(buffer)-1] = '\0'; - slen = strlen(buffer)+1; - - o = *off; - if (o > slen) - return 0; - - if (o + count > slen) - count = slen - o; - if (copy_to_user(u_data, buffer + o, count)) - return -EFAULT; + ret = simple_read_from_buffer(u_data, count, off, buffer, + strlen(buffer)); + if (ret <= 0) + return ret; - *off = o + count; filp->f_path.dentry->d_inode->i_atime = filp->f_path.dentry->d_inode->i_ctime = CURRENT_TIME; - return count; + return ret; } static int mqueue_flush_file(struct file *filp, fl_owner_t id)