summaryrefslogtreecommitdiffstats
path: root/fs/devfs.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/devfs.c')
-rw-r--r--fs/devfs.c14
1 files changed, 9 insertions, 5 deletions
diff --git a/fs/devfs.c b/fs/devfs.c
index 81ae2c25a5..ae5e6475b1 100644
--- a/fs/devfs.c
+++ b/fs/devfs.c
@@ -60,15 +60,19 @@ static int devfs_write(struct device_d *_dev, FILE *f, const void *buf, size_t s
static loff_t devfs_lseek(struct device_d *_dev, FILE *f, loff_t pos)
{
struct cdev *cdev = f->priv;
- loff_t ret = -1;
+ loff_t ret;
- if (cdev->ops->lseek)
+ if (cdev->ops->lseek) {
ret = cdev->ops->lseek(cdev, pos + cdev->offset);
+ if (ret < 0)
+ return ret;
+ } else {
+ return -ENOSYS;
+ }
- if (ret != -1)
- f->pos = pos;
+ f->pos = pos;
- return ret - cdev->offset;
+ return pos;
}
static int devfs_erase(struct device_d *_dev, FILE *f, loff_t count, loff_t offset)