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

Method Seek

src/filesystem/ramfs/ramfs.cpp:372–413  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

370}
371
372auto RamFs::RamFsFileOps::Seek(File* file, int64_t offset, SeekWhence whence)
373 -> Expected<uint64_t> {
374 if (file == nullptr) {
375 return std::unexpected(Error(ErrorCode::kInvalidArgument));
376 }
377
378 uint64_t new_offset = 0;
379
380 switch (whence) {
381 case SeekWhence::kSet:
382 if (offset < 0) {
383 return std::unexpected(Error(ErrorCode::kInvalidArgument));
384 }
385 new_offset = static_cast<uint64_t>(offset);
386 break;
387
388 case SeekWhence::kCur:
389 if (offset < 0 && static_cast<uint64_t>(-offset) > file->offset) {
390 return std::unexpected(Error(ErrorCode::kInvalidArgument));
391 }
392 new_offset =
393 static_cast<uint64_t>(static_cast<int64_t>(file->offset) + offset);
394 break;
395
396 case SeekWhence::kEnd:
397 if (file->inode == nullptr) {
398 return std::unexpected(Error(ErrorCode::kFsCorrupted));
399 }
400 if (offset < 0 && static_cast<uint64_t>(-offset) > file->inode->size) {
401 return std::unexpected(Error(ErrorCode::kInvalidArgument));
402 }
403 new_offset = static_cast<uint64_t>(
404 static_cast<int64_t>(file->inode->size) + offset);
405 break;
406
407 default:
408 return std::unexpected(Error(ErrorCode::kInvalidArgument));
409 }
410
411 file->offset = new_offset;
412 return new_offset;
413}
414
415auto RamFs::RamFsFileOps::Close(File* file) -> Expected<void> {
416 if (file == nullptr) {

Callers 1

SeekFunction · 0.45

Calls 1

ErrorClass · 0.85

Tested by

no test coverage detected