ipc: use simple_read_from_buffer()
Also this patch kills unneccesary trailing NULL character. Signed-off-by: Akinobu Mita <akinobu.mita@gmail.com> Cc: Nadia Derbey <Nadia.Derbey@bull.net> Cc: Manfred Spraul <manfred@colorfullife.com> Cc: Pierre Peiffer <peifferp@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:
parent
380af1b33b
commit
f1a43f93f0
25
ipc/mqueue.c
25
ipc/mqueue.c
@ -314,15 +314,11 @@ static int mqueue_unlink(struct inode *dir, struct dentry *dentry)
|
|||||||
* through std routines)
|
* through std routines)
|
||||||
*/
|
*/
|
||||||
static ssize_t mqueue_read_file(struct file *filp, char __user *u_data,
|
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);
|
struct mqueue_inode_info *info = MQUEUE_I(filp->f_path.dentry->d_inode);
|
||||||
char buffer[FILENT_SIZE];
|
char buffer[FILENT_SIZE];
|
||||||
size_t slen;
|
ssize_t ret;
|
||||||
loff_t o;
|
|
||||||
|
|
||||||
if (!count)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
spin_lock(&info->lock);
|
spin_lock(&info->lock);
|
||||||
snprintf(buffer, sizeof(buffer),
|
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));
|
pid_vnr(info->notify_owner));
|
||||||
spin_unlock(&info->lock);
|
spin_unlock(&info->lock);
|
||||||
buffer[sizeof(buffer)-1] = '\0';
|
buffer[sizeof(buffer)-1] = '\0';
|
||||||
slen = strlen(buffer)+1;
|
|
||||||
|
|
||||||
o = *off;
|
ret = simple_read_from_buffer(u_data, count, off, buffer,
|
||||||
if (o > slen)
|
strlen(buffer));
|
||||||
return 0;
|
if (ret <= 0)
|
||||||
|
return ret;
|
||||||
|
|
||||||
if (o + count > slen)
|
|
||||||
count = slen - o;
|
|
||||||
|
|
||||||
if (copy_to_user(u_data, buffer + o, count))
|
|
||||||
return -EFAULT;
|
|
||||||
|
|
||||||
*off = o + count;
|
|
||||||
filp->f_path.dentry->d_inode->i_atime = filp->f_path.dentry->d_inode->i_ctime = CURRENT_TIME;
|
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)
|
static int mqueue_flush_file(struct file *filp, fl_owner_t id)
|
||||||
|
Loading…
Reference in New Issue
Block a user