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

Function dfs_file_pwrite

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

* @brief Write data to a file at specified offset * * @param[in] file Pointer to the file structure to write to * @param[in] buf Buffer containing data to write * @param[in] len Number of bytes to write * @param[in] offset Offset in the file to start writing from * * @return ssize_t Number of bytes written on success, or negative error code: * -EBADF if invalid file descriptor or b

Source from the content-addressed store, hash-verified

1024 * after write operation.
1025 */
1026ssize_t dfs_file_pwrite(struct dfs_file *file, const void *buf, size_t len, off_t offset)
1027{
1028 ssize_t ret = -EBADF;
1029
1030 if (file)
1031 {
1032 if (!(dfs_fflags(file->flags) & DFS_F_FWRITE))
1033 {
1034 LOG_W("bad write flags.");
1035 ret = -EBADF;
1036 }
1037 else if (!file->fops || !file->fops->write)
1038 {
1039 LOG_W("no fops write.");
1040 ret = -ENOSYS;
1041 }
1042 else if (file->vnode && file->vnode->type != FT_DIRECTORY)
1043 {
1044 off_t pos = offset;
1045
1046 ret = rw_verify_area(file, &pos, len);
1047 if (ret > 0)
1048 {
1049 len = ret;
1050 DLOG(msg, "dfs_file", file->dentry->mnt->fs_ops->name, DLOG_MSG,
1051 "dfs_file_write(fd, buf, %d)", len);
1052
1053 if (dfs_is_mounted(file->vnode->mnt) == 0)
1054 {
1055#ifdef RT_USING_PAGECACHE
1056 if (file->vnode->aspace && !(file->flags & O_DIRECT))
1057 {
1058 ret = dfs_aspace_write(file, buf, len, &pos);
1059 }
1060 else
1061#endif
1062 {
1063 ret = file->fops->write(file, buf, len, &pos);
1064 }
1065
1066 if (file->flags & O_SYNC)
1067 {
1068 file->fops->flush(file);
1069 }
1070 }
1071 else
1072 {
1073 ret = -EINVAL;
1074 }
1075 }
1076 }
1077 }
1078
1079 return ret;
1080}
1081
1082/**
1083 * @brief Write data to a file at current position

Callers 1

pwriteFunction · 0.85

Calls 5

dfs_fflagsFunction · 0.85
rw_verify_areaFunction · 0.85
dfs_is_mountedFunction · 0.85
dfs_aspace_writeFunction · 0.85
writeMethod · 0.45

Tested by

no test coverage detected