aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/mtd/mtdchar.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/mtd/mtdchar.c')
-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 16df1e4fb0e9..8c0d94b72b63 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 *
@@ -70,26 +70,23 @@ static loff_t mtd_lseek (struct file *file, loff_t offset, int orig)
70 switch (orig) { 70 switch (orig) {
71 case 0: 71 case 0:
72 /* SEEK_SET */ 72 /* SEEK_SET */
73 file->f_pos = offset;
74 break; 73 break;
75 case 1: 74 case 1:
76 /* SEEK_CUR */ 75 /* SEEK_CUR */
77 file->f_pos += offset; 76 offset += file->f_pos;
78 break; 77 break;
79 case 2: 78 case 2:
80 /* SEEK_END */ 79 /* SEEK_END */
81 file->f_pos =mtd->size + offset; 80 offset += mtd->size;
82 break; 81 break;
83 default: 82 default:
84 return -EINVAL; 83 return -EINVAL;
85 } 84 }
86 85
87 if (file->f_pos < 0) 86 if (offset >= 0 && offset < mtd->size)
88 file->f_pos = 0; 87 return file->f_pos = offset;
89 else if (file->f_pos >= mtd->size)
90 file->f_pos = mtd->size - 1;
91 88
92 return file->f_pos; 89 return -EINVAL;
93} 90}
94 91
95 92