summaryrefslogtreecommitdiffstats
path: root/fs/fs.c
diff options
context:
space:
mode:
authorSascha Hauer <s.hauer@pengutronix.de>2007-07-05 18:01:39 +0200
committerSascha Hauer <sha@octopus.labnet.pengutronix.de>2007-07-05 18:01:39 +0200
commiteaff0679f342d9dd36827b4df0326aa54747812e (patch)
tree83691837cda9187750b3f5651d318b232e080ccd /fs/fs.c
parenta4b702a62fe81d4c775ac1a4c088aea7682e55aa (diff)
downloadbarebox-eaff0679f342d9dd36827b4df0326aa54747812e.tar.gz
barebox-eaff0679f342d9dd36827b4df0326aa54747812e.tar.xz
svn_rev_281
read support for ramfs
Diffstat (limited to 'fs/fs.c')
-rw-r--r--fs/fs.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/fs/fs.c b/fs/fs.c
index 55bd2290a1..22fcbd554f 100644
--- a/fs/fs.c
+++ b/fs/fs.c
@@ -234,8 +234,12 @@ int read(int fd, void *buf, size_t count)
if (dev->type == DEVICE_TYPE_FS) {
fsdrv = (struct fs_driver_d *)dev->driver->type_data;
printf("\nreading %d bytes at %d\n",count, f->pos);
+ if (f->pos + count > f->size)
+ count = f->size - f->pos;
errno = fsdrv->read(dev, f, buf, count);
} else {
+ if (f->pos + count > dev->size)
+ count = dev->size - f->pos;
errno = dev->driver->read(dev, buf, count, f->pos, 0); /* FIXME: flags */
}
if (errno > 0)
@@ -261,6 +265,8 @@ ssize_t write(int fd, const void *buf, size_t count)
}
errno = fsdrv->write(dev, f, buf, count);
} else {
+ if (f->pos + count > dev->size)
+ count = dev->size - f->pos;
errno = dev->driver->write(dev, buf, count, f->pos, 0); /* FIXME: flags */
}
if (errno > 0)