MCPcopy Create free account
hub / github.com/Simple-XX/SimpleKernel / Seek

Method Seek

src/filesystem/fatfs/fatfs.cpp:436–463  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

434}
435
436auto 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
465auto FatFsFileSystem::FatFsFileOps::Close(vfs::File* file) -> Expected<void> {
466 auto* fi = static_cast<FatInode*>(file->inode->fs_private);

Callers

nothing calls this directly

Calls 1

FresultToErrorCodeFunction · 0.85

Tested by

no test coverage detected