MCPcopy Create free account
hub / github.com/Bananymous/banan-os / create_file_impl

Method create_file_impl

kernel/kernel/FS/Ext2/Inode.cpp:515–548  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

513 }
514
515 BAN::ErrorOr<void> Ext2Inode::create_file_impl(BAN::StringView name, mode_t mode, uid_t uid, gid_t gid)
516 {
517 ASSERT(this->mode().ifdir());
518
519 switch (mode & Inode::Mode::TYPE_MASK)
520 {
521 case Inode::Mode::IFLNK:
522 case Inode::Mode::IFREG:
523 case Inode::Mode::IFIFO:
524 case Inode::Mode::IFSOCK:
525 break;
526 return BAN::Error::from_errno(ENOTSUP);
527 }
528
529 RWLockWRGuard _(m_lock);
530
531 if (!find_inode_no_lock(name).is_error())
532 return BAN::Error::from_errno(EEXIST);
533
534 const uint32_t new_ino = TRY(m_fs.create_inode(initialize_new_inode_info(mode, uid, gid)));
535
536 auto inode_or_error = m_fs.open_inode(new_ino);
537 if (inode_or_error.is_error())
538 {
539 TRY(m_fs.delete_inode(new_ino));
540 return inode_or_error.release_error();
541 }
542
543 auto inode = inode_or_error.release_value();
544
545 TRY(link_inode_to_directory_no_lock(*inode, name));
546
547 return {};
548 }
549
550 BAN::ErrorOr<void> Ext2Inode::create_directory_impl(BAN::StringView name, mode_t mode, uid_t uid, gid_t gid)
551 {

Callers

nothing calls this directly

Calls 9

ifdirMethod · 0.80
modeMethod · 0.80
create_inodeMethod · 0.80
is_errorMethod · 0.45
open_inodeMethod · 0.45
delete_inodeMethod · 0.45
release_errorMethod · 0.45
release_valueMethod · 0.45

Tested by

no test coverage detected