diff --git a/fs/devfs.c b/fs/devfs.c index a7400df..d088c1a 100644 --- a/fs/devfs.c +++ b/fs/devfs.c @@ -78,13 +78,10 @@ if (cdev->flags & DEVFS_PARTITION_READONLY) return -EPERM; - if (!cdev->ops->erase) - return -ENOSYS; - if (count + offset > cdev->size) count = cdev->size - offset; - return cdev->ops->erase(cdev, count, offset + cdev->offset); + return cdev_erase(cdev, count, offset); } static int devfs_protect(struct device_d *_dev, FILE *f, size_t count, loff_t offset, int prot) @@ -155,10 +152,7 @@ { struct cdev *cdev = f->priv; - if (cdev->ops->flush) - return cdev->ops->flush(cdev); - - return 0; + return cdev_flush(cdev); } static int devfs_ioctl(struct device_d *_dev, FILE *f, int request, void *buf) diff --git a/fs/fs.c b/fs/fs.c index 1f6b3d3..c6cb499 100644 --- a/fs/fs.c +++ b/fs/fs.c @@ -171,14 +171,14 @@ dput(f->dentry); } -static int check_fd(int fd) +static FILE *fd_to_file(int fd) { if (fd < 0 || fd >= MAX_FILES || !files[fd].in_use) { errno = EBADF; - return -errno; + return ERR_PTR(-errno); } - return 0; + return &files[fd]; } static int create(struct dentry *dir, struct dentry *dentry) @@ -205,14 +205,12 @@ int ftruncate(int fd, loff_t length) { struct fs_driver_d *fsdrv; - FILE *f; + FILE *f = fd_to_file(fd); int ret; - if (check_fd(fd)) + if (IS_ERR(f)) return -errno; - f = &files[fd]; - if (f->size == FILE_SIZE_STREAM) return 0; @@ -232,14 +230,12 @@ int ioctl(int fd, int request, void *buf) { struct fs_driver_d *fsdrv; - FILE *f; + FILE *f = fd_to_file(fd); int ret; - if (check_fd(fd)) + if (IS_ERR(f)) return -errno; - f = &files[fd]; - fsdrv = f->fsdev->driver; if (fsdrv->ioctl) @@ -279,14 +275,12 @@ ssize_t pread(int fd, void *buf, size_t count, loff_t offset) { loff_t pos; - FILE *f; + FILE *f = fd_to_file(fd); int ret; - if (check_fd(fd)) + if (IS_ERR(f)) return -errno; - f = &files[fd]; - pos = f->pos; f->pos = offset; ret = __read(f, buf, count); @@ -298,14 +292,12 @@ ssize_t read(int fd, void *buf, size_t count) { - FILE *f; + FILE *f = fd_to_file(fd); int ret; - if (check_fd(fd)) + if (IS_ERR(f)) return -errno; - f = &files[fd]; - ret = __read(f, buf, count); if (ret > 0) @@ -348,14 +340,12 @@ ssize_t pwrite(int fd, const void *buf, size_t count, loff_t offset) { loff_t pos; - FILE *f; + FILE *f = fd_to_file(fd); int ret; - if (check_fd(fd)) + if (IS_ERR(f)) return -errno; - f = &files[fd]; - pos = f->pos; f->pos = offset; ret = __write(f, buf, count); @@ -367,14 +357,12 @@ ssize_t write(int fd, const void *buf, size_t count) { - FILE *f; + FILE *f = fd_to_file(fd); int ret; - if (check_fd(fd)) + if (IS_ERR(f)) return -errno; - f = &files[fd]; - ret = __write(f, buf, count); if (ret > 0) @@ -386,14 +374,12 @@ int flush(int fd) { struct fs_driver_d *fsdrv; - FILE *f; + FILE *f = fd_to_file(fd); int ret; - if (check_fd(fd)) + if (IS_ERR(f)) return -errno; - f = &files[fd]; - fsdrv = f->fsdev->driver; if (fsdrv->flush) ret = fsdrv->flush(&f->fsdev->dev, f); @@ -406,17 +392,16 @@ return ret; } -loff_t lseek(int fildes, loff_t offset, int whence) +loff_t lseek(int fd, loff_t offset, int whence) { struct fs_driver_d *fsdrv; - FILE *f; + FILE *f = fd_to_file(fd); loff_t pos; int ret; - if (check_fd(fildes)) + if (IS_ERR(f)) return -1; - f = &files[fildes]; fsdrv = f->fsdev->driver; ret = -EINVAL; @@ -461,12 +446,11 @@ int erase(int fd, loff_t count, loff_t offset) { struct fs_driver_d *fsdrv; - FILE *f; + FILE *f = fd_to_file(fd); int ret; - if (check_fd(fd)) + if (IS_ERR(f)) return -errno; - f = &files[fd]; if (offset >= f->size) return 0; if (count == ERASE_SIZE_ALL || count > f->size - offset) @@ -490,12 +474,11 @@ int protect(int fd, size_t count, loff_t offset, int prot) { struct fs_driver_d *fsdrv; - FILE *f; + FILE *f = fd_to_file(fd); int ret; - if (check_fd(fd)) + if (IS_ERR(f)) return -errno; - f = &files[fd]; if (offset >= f->size) return 0; if (count > f->size - offset) @@ -532,15 +515,13 @@ void *memmap(int fd, int flags) { struct fs_driver_d *fsdrv; - FILE *f; + FILE *f = fd_to_file(fd); void *retp = MAP_FAILED; int ret; - if (check_fd(fd)) + if (IS_ERR(f)) return retp; - f = &files[fd]; - fsdrv = f->fsdev->driver; if (fsdrv->memmap) @@ -558,14 +539,12 @@ int close(int fd) { struct fs_driver_d *fsdrv; - FILE *f; + FILE *f = fd_to_file(fd); int ret = 0; - if (check_fd(fd)) + if (IS_ERR(f)) return -errno; - f = &files[fd]; - fsdrv = f->fsdev->driver; if (fsdrv->close) @@ -809,9 +788,6 @@ struct readdir_entry *entry; entry = xzalloc(sizeof(*entry)); - if (!entry) - return -ENOMEM; - memcpy(entry->d.d_name, name, namlen); list_add_tail(&entry->list, &rd->dir->entries); @@ -850,16 +826,11 @@ int fstat(int fd, struct stat *s) { - FILE *f; - struct fs_device_d *fsdev; + FILE *f = fd_to_file(fd); - if (check_fd(fd)) + if (IS_ERR(f)) return -errno; - f = &files[fd]; - - fsdev = f->fsdev; - stat_inode(f->f_inode, s); return 0; diff --git a/fs/ramfs.c b/fs/ramfs.c index 4fba40d..3046afe 100644 --- a/fs/ramfs.c +++ b/fs/ramfs.c @@ -403,8 +403,6 @@ struct ramfs_inode *node; node = xzalloc(sizeof(*node)); - if (!node) - return NULL; return &node->inode; }