diff --git a/components/fal/src/fal_rtt.c b/components/fal/src/fal_rtt.c index eca8c10914e..077191e102e 100644 --- a/components/fal/src/fal_rtt.c +++ b/components/fal/src/fal_rtt.c @@ -435,42 +435,56 @@ static int char_dev_fopen(struct dfs_file *fd) return RT_EOK; } -static int char_dev_fread(struct dfs_file *fd, void *buf, rt_size_t count) +#ifdef RT_USING_DFS_V2 +static rt_ssize_t char_dev_fread(struct dfs_file *fd, void *buf, size_t count, off_t *pos) +#else +static rt_ssize_t char_dev_fread(struct dfs_file *fd, void *buf, size_t count) +#endif { - int ret = 0; + rt_ssize_t ret = 0; struct fal_char_device *part = (struct fal_char_device *) fd->vnode->data; +#ifndef RT_USING_DFS_V2 + off_t *pos = &(fd->pos); +#endif RT_ASSERT(part != RT_NULL); - if (DFS_FILE_POS(fd) + count > part->fal_part->len) - count = part->fal_part->len - DFS_FILE_POS(fd); + if (*pos + count > part->fal_part->len) + count = part->fal_part->len - *pos; - ret = fal_partition_read(part->fal_part, DFS_FILE_POS(fd), buf, count); + ret = fal_partition_read(part->fal_part, *pos, buf, count); - if (ret != (int)(count)) + if (ret != (rt_ssize_t)(count)) return 0; - DFS_FILE_POS(fd) += ret; + *pos += ret; return ret; } -static int char_dev_fwrite(struct dfs_file *fd, const void *buf, rt_size_t count) +#ifdef RT_USING_DFS_V2 +static rt_ssize_t char_dev_fwrite(struct dfs_file *fd, const void *buf, size_t count, off_t *pos) +#else +static rt_ssize_t char_dev_fwrite(struct dfs_file *fd, const void *buf, size_t count) +#endif { - int ret = 0; + rt_ssize_t ret = 0; struct fal_char_device *part = (struct fal_char_device *) fd->vnode->data; +#ifndef RT_USING_DFS_V2 + off_t *pos = &(fd->pos); +#endif RT_ASSERT(part != RT_NULL); - if (DFS_FILE_POS(fd) + count > part->fal_part->len) - count = part->fal_part->len - DFS_FILE_POS(fd); + if (*pos + count > part->fal_part->len) + count = part->fal_part->len - *pos; - ret = fal_partition_write(part->fal_part, DFS_FILE_POS(fd), buf, count); + ret = fal_partition_write(part->fal_part, *pos, buf, count); - if (ret != (int) count) + if (ret != (rt_ssize_t) count) return 0; - DFS_FILE_POS(fd) += ret; + *pos += ret; return ret; }