diff --git a/Kernel/Devices/SerialDevice.cpp b/Kernel/Devices/SerialDevice.cpp index 623c8cc7fc..81416502f1 100644 --- a/Kernel/Devices/SerialDevice.cpp +++ b/Kernel/Devices/SerialDevice.cpp @@ -18,24 +18,30 @@ namespace Kernel { UNMAP_AFTER_INIT NonnullRefPtr SerialDevice::must_create(size_t com_number) { - SerialDevice* device = nullptr; + // FIXME: This way of blindly doing release_value is really not a good thing, find + // a way to propagate errors back. + RefPtr serial_device; switch (com_number) { - case 0: - device = new SerialDevice(IOAddress(SERIAL_COM1_ADDR), 64); + case 0: { + serial_device = try_create_device(IOAddress(SERIAL_COM1_ADDR), 64).release_value(); break; - case 1: - device = new SerialDevice(IOAddress(SERIAL_COM2_ADDR), 65); + } + case 1: { + serial_device = try_create_device(IOAddress(SERIAL_COM2_ADDR), 65).release_value(); break; - case 2: - device = new SerialDevice(IOAddress(SERIAL_COM3_ADDR), 66); + } + case 2: { + serial_device = try_create_device(IOAddress(SERIAL_COM3_ADDR), 66).release_value(); break; - case 3: - device = new SerialDevice(IOAddress(SERIAL_COM4_ADDR), 67); + } + case 3: { + serial_device = try_create_device(IOAddress(SERIAL_COM4_ADDR), 67).release_value(); break; + } default: break; } - return adopt_ref_if_nonnull(device).release_nonnull(); + return serial_device.release_nonnull(); } UNMAP_AFTER_INIT SerialDevice::SerialDevice(IOAddress base_addr, unsigned minor) diff --git a/Kernel/Devices/SerialDevice.h b/Kernel/Devices/SerialDevice.h index 9e39a902f3..a0070f06e1 100644 --- a/Kernel/Devices/SerialDevice.h +++ b/Kernel/Devices/SerialDevice.h @@ -102,10 +102,12 @@ public: DataReady = 0x01 << 0 }; + // FIXME: We expose this constructor to make try_create_device helper to work + SerialDevice(IOAddress base_addr, unsigned minor); + private: friend class PCISerialDevice; - SerialDevice(IOAddress base_addr, unsigned minor); // ^CharacterDevice virtual StringView class_name() const override { return "SerialDevice"; }