Serenity Operating System
at master 67 lines 1.8 kB view raw
1/* 2 * Copyright (c) 2022, Liav A. <liavalb@hotmail.co.il> 3 * 4 * SPDX-License-Identifier: BSD-2-Clause 5 */ 6 7#include <Kernel/Devices/DeviceManagement.h> 8#include <Kernel/Devices/SelfTTYDevice.h> 9#include <Kernel/Sections.h> 10#include <Kernel/TTY/TTY.h> 11 12namespace Kernel { 13 14UNMAP_AFTER_INIT NonnullLockRefPtr<SelfTTYDevice> SelfTTYDevice::must_create() 15{ 16 auto self_tty_device_or_error = DeviceManagement::try_create_device<SelfTTYDevice>(); 17 // FIXME: Find a way to propagate errors 18 VERIFY(!self_tty_device_or_error.is_error()); 19 return self_tty_device_or_error.release_value(); 20} 21 22ErrorOr<NonnullRefPtr<OpenFileDescription>> SelfTTYDevice::open(int options) 23{ 24 // Note: If for some odd reason we try to open this device (early on boot?) 25 // while there's no current Process assigned, don't fail and return an error. 26 if (!Process::has_current()) 27 return Error::from_errno(ESRCH); 28 auto& current_process = Process::current(); 29 LockRefPtr<TTY> tty = current_process.tty(); 30 if (!tty) 31 return Error::from_errno(ENXIO); 32 auto description = TRY(OpenFileDescription::try_create(*tty)); 33 description->set_rw_mode(options); 34 description->set_file_flags(options); 35 return description; 36} 37 38bool SelfTTYDevice::can_read(OpenFileDescription const&, u64) const 39{ 40 VERIFY_NOT_REACHED(); 41} 42 43bool SelfTTYDevice::can_write(OpenFileDescription const&, u64) const 44{ 45 VERIFY_NOT_REACHED(); 46} 47 48ErrorOr<size_t> SelfTTYDevice::read(OpenFileDescription&, u64, UserOrKernelBuffer&, size_t) 49{ 50 VERIFY_NOT_REACHED(); 51} 52 53ErrorOr<size_t> SelfTTYDevice::write(OpenFileDescription&, u64, UserOrKernelBuffer const&, size_t) 54{ 55 VERIFY_NOT_REACHED(); 56} 57 58UNMAP_AFTER_INIT SelfTTYDevice::SelfTTYDevice() 59 : CharacterDevice(5, 0) 60{ 61} 62 63UNMAP_AFTER_INIT SelfTTYDevice::~SelfTTYDevice() 64{ 65} 66 67}