MCPcopy Create free account
hub / github.com/RT-Thread/rt-thread / dfs_file_pread

Function dfs_file_pread

components/dfs/dfs_v2/src/dfs_file.c:898–944  ·  view source on GitHub ↗

* @brief Read data from a file at specified offset * * @param[in] file Pointer to the file structure to read from * @param[out] buf Buffer to store the read data * @param[in] len Number of bytes to read * @param[in] offset Offset in the file to start reading from * * @return ssize_t Number of bytes read on success, or negative error code: * -EBADF if invalid file descriptor *

Source from the content-addressed store, hash-verified

896 * -EINVAL if invalid parameters or not mounted
897 */
898ssize_t dfs_file_pread(struct dfs_file *file, void *buf, size_t len, off_t offset)
899{
900 ssize_t ret = -EBADF;
901
902 if (file)
903 {
904 /* check whether read */
905 if (!(dfs_fflags(file->flags) & DFS_F_FREAD))
906 {
907 ret = -EPERM;
908 }
909 else if (!file->fops || !file->fops->read)
910 {
911 ret = -ENOSYS;
912 }
913 else if (file->vnode && file->vnode->type != FT_DIRECTORY)
914 {
915 off_t pos = offset;
916
917 ret = rw_verify_area(file, &pos, len);
918 if (ret > 0)
919 {
920 len = ret;
921
922 if (dfs_is_mounted(file->vnode->mnt) == 0)
923 {
924#ifdef RT_USING_PAGECACHE
925 if (file->vnode->aspace && !(file->flags & O_DIRECT))
926 {
927 ret = dfs_aspace_read(file, buf, len, &pos);
928 }
929 else
930#endif
931 {
932 ret = file->fops->read(file, buf, len, &pos);
933 }
934 }
935 else
936 {
937 ret = -EINVAL;
938 }
939 }
940 }
941 }
942
943 return ret;
944}
945
946/**
947 * @brief Read data from a file at current position

Callers 1

preadFunction · 0.85

Calls 5

dfs_fflagsFunction · 0.85
rw_verify_areaFunction · 0.85
dfs_is_mountedFunction · 0.85
dfs_aspace_readFunction · 0.85
readMethod · 0.45

Tested by

no test coverage detected