diff --git a/fs/fs.c b/fs/fs.c index 148e3a3..7c1f18e 100644 --- a/fs/fs.c +++ b/fs/fs.c @@ -499,9 +499,15 @@ fsdrv = (struct fs_driver_d *)dev->driver->type_data; if (f->pos + count > f->size) { errno = fsdrv->truncate(dev, f, f->pos + count); - if (errno) - return errno; - f->size = f->pos + count; + if (errno) { + if (errno != -ENOSPC) + return errno; + count = f->size - f->pos; + if (!count) + return errno; + } else { + f->size = f->pos + count; + } } errno = fsdrv->write(dev, f, buf, count);