|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v2 17/18] mini-os: use function vectors instead of switch for file operations
Juergen Gross, le mar. 11 janv. 2022 15:58:16 +0100, a ecrit:
> @@ -370,8 +413,45 @@ int write(int fd, const void *buf, size_t nbytes)
> return -1;
> }
>
> +off_t lseek_default(int fd, off_t offset, int whence)
> +{
> + switch ( whence )
> + {
Is there a reason for making this one a separate function, unlike others
for which you kept the code in the main function?
Apart from that, this looks good to me.
> + case SEEK_SET:
> + files[fd].offset = offset;
> + break;
> +
> + case SEEK_CUR:
> + files[fd].offset += offset;
> + break;
> +
> + case SEEK_END:
> + {
> + struct stat st;
> + int ret;
> +
> + ret = fstat(fd, &st);
> + if ( ret )
> + return -1;
> + files[fd].offset = st.st_size + offset;
> + break;
> + }
> +
> + default:
> + errno = EINVAL;
> + return -1;
> + }
> +
> + return files[fd].offset;
> +}
> +
> off_t lseek(int fd, off_t offset, int whence)
> {
> + struct file_ops *ops = get_file_ops(files[fd].type);
> +
> + if ( ops->lseek )
> + return ops->lseek(fd, offset, whence);
> +
> switch(files[fd].type) {
> #ifdef CONFIG_BLKFRONT
> case FTYPE_BLK:
> @@ -393,28 +473,7 @@ off_t lseek(int fd, off_t offset, int whence)
> return (off_t) -1;
> }
>
> - switch (whence) {
> - case SEEK_SET:
> - files[fd].offset = offset;
> - break;
> - case SEEK_CUR:
> - files[fd].offset += offset;
> - break;
> - case SEEK_END:
> - {
> - struct stat st;
> - int ret;
> - ret = fstat(fd, &st);
> - if (ret)
> - return -1;
> - files[fd].offset = st.st_size + offset;
> - break;
> - }
> - default:
> - errno = EINVAL;
> - return -1;
> - }
> - return files[fd].offset;
> + return lseek_default(fd, offset, whence);
> }
>
> int fsync(int fd) {
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |