diff options
Diffstat (limited to 'drivers/mtd/mtdchar.c')
-rw-r--r-- | drivers/mtd/mtdchar.c | 15 |
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 | ||