patch-2.4.27 linux-2.4.27/drivers/isdn/hysdn/hysdn_procconf.c
Next file: linux-2.4.27/drivers/isdn/hysdn/hysdn_proclog.c
Previous file: linux-2.4.27/drivers/isdn/hisax/nj_s.c
Back to the patch index
Back to the overall index
- Lines: 44
- Date:
2004-08-07 16:26:04.860355242 -0700
- Orig file:
linux-2.4.26/drivers/isdn/hysdn/hysdn_procconf.c
- Orig date:
2001-12-21 09:41:54.000000000 -0800
diff -urN linux-2.4.26/drivers/isdn/hysdn/hysdn_procconf.c linux-2.4.27/drivers/isdn/hysdn/hysdn_procconf.c
@@ -212,29 +212,27 @@
static ssize_t
hysdn_conf_read(struct file *file, char *buf, size_t count, loff_t * off)
{
+ loff_t pos = *off;
char *cp;
int i;
if (off != &file->f_pos) /* fs error check */
return -ESPIPE;
- if (file->f_mode & FMODE_READ) {
- if (!(cp = file->private_data))
- return (-EFAULT); /* should never happen */
- i = strlen(cp); /* get total string length */
- if (*off < i) {
- /* still bytes to transfer */
- cp += *off; /* point to desired data offset */
- i -= *off; /* remaining length */
- if (i > count)
- i = count; /* limit length to transfer */
- if (copy_to_user(buf, cp, i))
- return (-EFAULT); /* copy error */
- *off += i; /* adjust offset */
- } else
- return (0);
+ if (!(cp = file->private_data))
+ return (-EFAULT); /* should never happen */
+ i = strlen(cp); /* get total string length */
+ if (pos == (unsigned)pos && pos < i) {
+ /* still bytes to transfer */
+ cp += pos; /* point to desired data offset */
+ i -= pos; /* remaining length */
+ if (i > count)
+ i = count; /* limit length to transfer */
+ if (copy_to_user(buf, cp, i))
+ return (-EFAULT); /* copy error */
+ *off = pos + i; /* adjust offset */
} else
- return (-EPERM); /* no permission to read */
+ return (0);
return (i);
} /* hysdn_conf_read */
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)