View | Details | Raw Unified | Return to bug 57096
Collapse All | Expand All

(-)linux/drivers/net/wireless/airo.c-o (-28 / +31 lines)
Lines 4145-4156 Link Here
4145
 */
4145
 */
4146
4146
4147
static ssize_t proc_read( struct file *file,
4147
static ssize_t proc_read( struct file *file,
4148
			  char *buffer,
4148
			  char __user *buffer,
4149
			  size_t len,
4149
			  size_t len,
4150
			  loff_t *offset);
4150
			  loff_t *offset);
4151
4151
4152
static ssize_t proc_write( struct file *file,
4152
static ssize_t proc_write( struct file *file,
4153
			   const char *buffer,
4153
			   const char __user *buffer,
4154
			   size_t len,
4154
			   size_t len,
4155
			   loff_t *offset );
4155
			   loff_t *offset );
4156
static int proc_close( struct inode *inode, struct file *file );
4156
static int proc_close( struct inode *inode, struct file *file );
Lines 4355-4377 Link Here
4355
 *  to supply the data.
4355
 *  to supply the data.
4356
 */
4356
 */
4357
static ssize_t proc_read( struct file *file,
4357
static ssize_t proc_read( struct file *file,
4358
			  char *buffer,
4358
			  char __user *buffer,
4359
			  size_t len,
4359
			  size_t len,
4360
			  loff_t *offset )
4360
			  loff_t *offset )
4361
{
4361
{
4362
	int i;
4362
	loff_t pos = *offset;
4363
	int pos;
4364
	struct proc_data *priv = (struct proc_data*)file->private_data;
4363
	struct proc_data *priv = (struct proc_data*)file->private_data;
4365
4364
4366
	if( !priv->rbuffer ) return -EINVAL;
4365
	if (!priv->rbuffer)
4366
		return -EINVAL;
4367
4367
4368
	pos = *offset;
4368
	if (pos < 0)
4369
	for( i = 0; i+pos < priv->readlen && i < len; i++ ) {
4369
		return -EINVAL;
4370
		if (put_user( priv->rbuffer[i+pos], buffer+i ))
4370
	if (pos >= priv->readlen)
4371
			return -EFAULT;
4371
		return 0;
4372
	}
4372
	if (len > priv->readlen - pos)
4373
	*offset += i;
4373
		len = priv->readlen - pos;
4374
	return i;
4374
	if (copy_to_user(buffer, priv->rbuffer + pos, len))
4375
		return -EFAULT;
4376
	*offset = pos + len;
4377
	return len;
4375
}
4378
}
4376
4379
4377
/*
4380
/*
Lines 4379-4406 Link Here
4379
 *  to supply the data.
4382
 *  to supply the data.
4380
 */
4383
 */
4381
static ssize_t proc_write( struct file *file,
4384
static ssize_t proc_write( struct file *file,
4382
			   const char *buffer,
4385
			   const char __user *buffer,
4383
			   size_t len,
4386
			   size_t len,
4384
			   loff_t *offset )
4387
			   loff_t *offset )
4385
{
4388
{
4386
	int i;
4389
	loff_t pos = *offset;
4387
	int pos;
4388
	struct proc_data *priv = (struct proc_data*)file->private_data;
4390
	struct proc_data *priv = (struct proc_data*)file->private_data;
4389
4391
4390
	if ( !priv->wbuffer ) {
4392
	if (!priv->wbuffer)
4391
		return -EINVAL;
4393
		return -EINVAL;
4392
	}
4393
4394
	pos = *offset;
4395
4394
4396
	for( i = 0; i + pos <  priv->maxwritelen &&
4395
	if (pos < 0)
4397
		     i < len; i++ ) {
4396
		return -EINVAL;
4398
		if (get_user( priv->wbuffer[i+pos], buffer + i ))
4397
	if (pos >= priv->maxwritelen)
4399
			return -EFAULT;
4398
		return 0;
4400
	}
4399
	if (len > priv->maxwritelen - pos)
4401
	if ( i+pos > priv->writelen ) priv->writelen = i+file->f_pos;
4400
		len = priv->maxwritelen - pos;
4402
	*offset += i;
4401
	if (copy_from_user(priv->wbuffer + pos, buffer, len))
4403
	return i;
4402
		return -EFAULT;
4403
	if (pos + len > priv->writelen)
4404
		priv->writelen = pos + len;
4405
	*offset = pos + len;
4406
	return len;
4404
}
4407
}
4405
4408
4406
static int proc_status_open( struct inode *inode, struct file *file ) {
4409
static int proc_status_open( struct inode *inode, struct file *file ) {

Return to bug 57096