patch-2.4.27 linux-2.4.27/drivers/mtd/mtdchar.c
Next file: linux-2.4.27/drivers/net/8139cp.c
Previous file: linux-2.4.27/drivers/message/fusion/scsi3.h
Back to the patch index
Back to the overall index
- Lines: 82
- Date:
2004-08-07 16:26:04.936358365 -0700
- Orig file:
linux-2.4.26/drivers/mtd/mtdchar.c
- Orig date:
2003-06-13 07:51:34.000000000 -0700
diff -urN linux-2.4.26/drivers/mtd/mtdchar.c linux-2.4.27/drivers/mtd/mtdchar.c
@@ -125,11 +125,15 @@
int ret=0;
int len;
char *kbuf;
+ loff_t pos = *ppos;
DEBUG(MTD_DEBUG_LEVEL0,"MTD_read\n");
- if (*ppos + count > mtd->size)
- count = mtd->size - *ppos;
+ if (pos < 0 || pos > mtd->size)
+ return 0;
+
+ if (count > mtd->size - pos)
+ count = mtd->size - pos;
if (!count)
return 0;
@@ -146,9 +150,9 @@
if (!kbuf)
return -ENOMEM;
- ret = MTD_READ(mtd, *ppos, len, &retlen, kbuf);
+ ret = MTD_READ(mtd, pos, len, &retlen, kbuf);
if (!ret) {
- *ppos += retlen;
+ pos += retlen;
if (copy_to_user(buf, kbuf, retlen)) {
kfree(kbuf);
return -EFAULT;
@@ -167,6 +171,8 @@
kfree(kbuf);
}
+ *ppos = pos;
+
return total_retlen;
} /* mtd_read */
@@ -176,17 +182,18 @@
char *kbuf;
size_t retlen;
size_t total_retlen=0;
+ loff_t pos = *ppos;
int ret=0;
int len;
DEBUG(MTD_DEBUG_LEVEL0,"MTD_write\n");
- if (*ppos == mtd->size)
+ if (pos < 0 || pos >= mtd->size)
return -ENOSPC;
-
- if (*ppos + count > mtd->size)
- count = mtd->size - *ppos;
+ if (count > mtd->size - pos)
+ count = mtd->size - pos;
+
if (!count)
return 0;
@@ -207,9 +214,9 @@
return -EFAULT;
}
- ret = (*(mtd->write))(mtd, *ppos, len, &retlen, kbuf);
+ ret = (*(mtd->write))(mtd, pos, len, &retlen, kbuf);
if (!ret) {
- *ppos += retlen;
+ pos += retlen;
total_retlen += retlen;
count -= retlen;
buf += retlen;
@@ -221,6 +228,7 @@
kfree(kbuf);
}
+ *ppos = pos;
return total_retlen;
} /* mtd_write */
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)