aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/mtd/mtdchar.c15
1 files changed, 6 insertions, 9 deletions
diff --git a/drivers/mtd/mtdchar.c b/drivers/mtd/mtdchar.c
index 1ed602a0f24c..4b3c6263e7fc 100644
--- a/drivers/mtd/mtdchar.c
+++ b/drivers/mtd/mtdchar.c
@@ -1,5 +1,5 @@
1/* 1/*
2 * $Id: mtdchar.c,v 1.73 2005/07/04 17:36:41 gleixner Exp $ 2 * $Id: mtdchar.c,v 1.74 2005/08/04 01:05:48 tpoynor Exp $
3 * 3 *
4 * Character-device access to raw MTD devices. 4 * Character-device access to raw MTD devices.
5 * 5 *
@@ -69,26 +69,23 @@ static loff_t mtd_lseek (struct file *file, loff_t offset, int orig)
69 switch (orig) { 69 switch (orig) {
70 case 0: 70 case 0:
71 /* SEEK_SET */ 71 /* SEEK_SET */
72 file->f_pos = offset;
73 break; 72 break;
74 case 1: 73 case 1:
75 /* SEEK_CUR */ 74 /* SEEK_CUR */
76 file->f_pos += offset; 75 offset += file->f_pos;
77 break; 76 break;
78 case 2: 77 case 2:
79 /* SEEK_END */ 78 /* SEEK_END */
80 file->f_pos =mtd->size + offset; 79 offset += mtd->size;
81 break; 80 break;
82 default: 81 default:
83 return -EINVAL; 82 return -EINVAL;
84 } 83 }
85 84
86 if (file->f_pos < 0) 85 if (offset >= 0 && offset < mtd->size)
87 file->f_pos = 0; 86 return file->f_pos = offset;
88 else if (file->f_pos >= mtd->size)
89 file->f_pos = mtd->size - 1;
90 87
91 return file->f_pos; 88 return -EINVAL;
92} 89}
93 90
94 91