| 434 | } |
| 435 | |
| 436 | auto FatFsFileSystem::FatFsFileOps::Seek(vfs::File* file, int64_t offset, |
| 437 | vfs::SeekWhence whence) |
| 438 | -> Expected<uint64_t> { |
| 439 | auto* fi = static_cast<FatInode*>(file->inode->fs_private); |
| 440 | if (fi->fil == nullptr) { |
| 441 | return std::unexpected(Error{ErrorCode::kFsInvalidFd}); |
| 442 | } |
| 443 | FSIZE_t new_pos = 0; |
| 444 | switch (whence) { |
| 445 | case vfs::SeekWhence::kSet: |
| 446 | new_pos = static_cast<FSIZE_t>(offset); |
| 447 | break; |
| 448 | case vfs::SeekWhence::kCur: |
| 449 | new_pos = |
| 450 | static_cast<FSIZE_t>(static_cast<int64_t>(f_tell(fi->fil)) + offset); |
| 451 | break; |
| 452 | case vfs::SeekWhence::kEnd: |
| 453 | new_pos = |
| 454 | static_cast<FSIZE_t>(static_cast<int64_t>(f_size(fi->fil)) + offset); |
| 455 | break; |
| 456 | } |
| 457 | FRESULT fr = f_lseek(fi->fil, new_pos); |
| 458 | if (fr != FR_OK) { |
| 459 | return std::unexpected(Error{FresultToErrorCode(fr)}); |
| 460 | } |
| 461 | file->offset = static_cast<uint64_t>(new_pos); |
| 462 | return static_cast<uint64_t>(new_pos); |
| 463 | } |
| 464 | |
| 465 | auto FatFsFileSystem::FatFsFileOps::Close(vfs::File* file) -> Expected<void> { |
| 466 | auto* fi = static_cast<FatInode*>(file->inode->fs_private); |
nothing calls this directly
no test coverage detected