diff options
| author | Akinobu Mita <akinobu.mita@gmail.com> | 2008-06-10 15:50:14 -0400 |
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2008-06-10 15:50:14 -0400 |
| commit | ea23ec26727b4df97b4965715f0519b6ddc0aa4b (patch) | |
| tree | ef76f52f64931e43bdd5695183d3604800ca00c2 | |
| parent | 495b36b15e17fb08434e3800959434f06a1a6fbc (diff) | |
isdn: use simple_read_from_buffer()
Signed-off-by: Akinobu Mita <akinobu.mita@gmail.com>
Acked-by: Karsten Keil <kkeil@suse.de>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
| -rw-r--r-- | drivers/isdn/hysdn/hysdn_procconf.c | 29 |
1 files changed, 8 insertions, 21 deletions
diff --git a/drivers/isdn/hysdn/hysdn_procconf.c b/drivers/isdn/hysdn/hysdn_procconf.c index 15906d005b05..484299b031f8 100644 --- a/drivers/isdn/hysdn/hysdn_procconf.c +++ b/drivers/isdn/hysdn/hysdn_procconf.c | |||
| @@ -207,30 +207,17 @@ hysdn_conf_write(struct file *file, const char __user *buf, size_t count, loff_t | |||
| 207 | /* read conf file -> output card info data */ | 207 | /* read conf file -> output card info data */ |
| 208 | /*******************************************/ | 208 | /*******************************************/ |
| 209 | static ssize_t | 209 | static ssize_t |
| 210 | hysdn_conf_read(struct file *file, char __user *buf, size_t count, loff_t * off) | 210 | hysdn_conf_read(struct file *file, char __user *buf, size_t count, loff_t *off) |
| 211 | { | 211 | { |
| 212 | char *cp; | 212 | char *cp; |
| 213 | int i; | ||
| 214 | 213 | ||
| 215 | if (file->f_mode & FMODE_READ) { | 214 | if (!(file->f_mode & FMODE_READ)) |
| 216 | if (!(cp = file->private_data)) | 215 | return -EPERM; /* no permission to read */ |
| 217 | return (-EFAULT); /* should never happen */ | 216 | |
| 218 | i = strlen(cp); /* get total string length */ | 217 | if (!(cp = file->private_data)) |
| 219 | if (*off < i) { | 218 | return -EFAULT; /* should never happen */ |
| 220 | /* still bytes to transfer */ | 219 | |
| 221 | cp += *off; /* point to desired data offset */ | 220 | return simple_read_from_buffer(buf, count, off, cp, strlen(cp)); |
| 222 | i -= *off; /* remaining length */ | ||
| 223 | if (i > count) | ||
| 224 | i = count; /* limit length to transfer */ | ||
| 225 | if (copy_to_user(buf, cp, i)) | ||
| 226 | return (-EFAULT); /* copy error */ | ||
| 227 | *off += i; /* adjust offset */ | ||
| 228 | } else | ||
| 229 | return (0); | ||
| 230 | } else | ||
| 231 | return (-EPERM); /* no permission to read */ | ||
| 232 | |||
| 233 | return (i); | ||
| 234 | } /* hysdn_conf_read */ | 221 | } /* hysdn_conf_read */ |
| 235 | 222 | ||
| 236 | /******************/ | 223 | /******************/ |
