mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-04-22 04:25:13 +00:00
Kernel: Make /proc/PID/fds display something useful for character devices.
This commit is contained in:
parent
786b903d62
commit
e6fc84e234
Notes:
sideshowbarker
2024-07-19 15:59:33 +09:00
Author: https://github.com/awesomekling Commit: https://github.com/SerenityOS/serenity/commit/e6fc84e2349
14 changed files with 46 additions and 6 deletions
|
@ -18,10 +18,12 @@ public:
|
|||
Console();
|
||||
virtual ~Console() override;
|
||||
|
||||
// ^CharacterDevice
|
||||
virtual bool can_read(Process&) const override;
|
||||
virtual bool can_write(Process&) const override { return true; }
|
||||
virtual ssize_t read(Process&, byte* buffer, size_t size) override;
|
||||
virtual ssize_t write(Process&, const byte* data, size_t size) override;
|
||||
virtual const char* class_name() const override { return "Console"; }
|
||||
|
||||
void setImplementation(ConsoleImplementation* implementation) { m_implementation = implementation; }
|
||||
|
||||
|
|
|
@ -13,4 +13,5 @@ private:
|
|||
virtual ssize_t write(Process&, const byte* buffer, size_t bufferSize) override;
|
||||
virtual bool can_read(Process&) const override;
|
||||
virtual bool can_write(Process&) const override { return true; }
|
||||
virtual const char* class_name() const override { return "GUIEventDevice"; }
|
||||
};
|
||||
|
|
|
@ -42,6 +42,9 @@ private:
|
|||
// ^IRQHandler
|
||||
virtual void handle_irq() override;
|
||||
|
||||
// ^CharacterDevice
|
||||
virtual const char* class_name() const override { return "Keyboard"; }
|
||||
|
||||
void emit(byte);
|
||||
|
||||
KeyboardClient* m_client { nullptr };
|
||||
|
|
|
@ -10,6 +10,7 @@ public:
|
|||
explicit MasterPTY(unsigned index);
|
||||
virtual ~MasterPTY() override;
|
||||
|
||||
// ^CharacterDevice
|
||||
virtual ssize_t read(Process&, byte*, size_t) override;
|
||||
virtual ssize_t write(Process&, const byte*, size_t) override;
|
||||
virtual bool can_read(Process&) const override;
|
||||
|
@ -21,6 +22,9 @@ public:
|
|||
void on_slave_write(const byte*, size_t);
|
||||
|
||||
private:
|
||||
// ^CharacterDevice
|
||||
virtual const char* class_name() const override { return "MasterPTY"; }
|
||||
|
||||
SlavePTY& m_slave;
|
||||
unsigned m_index;
|
||||
DoubleBuffer m_buffer;
|
||||
|
|
|
@ -20,6 +20,9 @@ private:
|
|||
// ^IRQHandler
|
||||
virtual void handle_irq() override;
|
||||
|
||||
// ^CharacterDevice
|
||||
virtual const char* class_name() const override { return "PS2MouseDevice"; }
|
||||
|
||||
void initialize();
|
||||
void prepare_for_input();
|
||||
void prepare_for_output();
|
||||
|
|
|
@ -19,6 +19,9 @@ public:
|
|||
virtual bool can_write(Process&) const override { return true; }
|
||||
|
||||
private:
|
||||
// ^CharacterDevice
|
||||
virtual const char* class_name() const override { return "PTYMultiplexer"; }
|
||||
|
||||
Lock m_lock;
|
||||
Vector<RetainPtr<MasterPTY>> m_freelist;
|
||||
};
|
||||
|
|
|
@ -8,16 +8,18 @@ class SlavePTY final : public TTY {
|
|||
public:
|
||||
virtual ~SlavePTY() override;
|
||||
|
||||
virtual String tty_name() const override;
|
||||
|
||||
void on_master_write(const byte*, size_t);
|
||||
unsigned index() const { return m_index; }
|
||||
|
||||
protected:
|
||||
virtual void on_tty_write(const byte*, size_t) override;
|
||||
virtual bool can_write(Process&) const override;
|
||||
|
||||
private:
|
||||
// ^TTY
|
||||
virtual String tty_name() const override;
|
||||
virtual void on_tty_write(const byte*, size_t) override;
|
||||
|
||||
// ^CharacterDevice
|
||||
virtual bool can_write(Process&) const override;
|
||||
virtual const char* class_name() const override { return "SlavePTY"; }
|
||||
|
||||
friend class MasterPTY;
|
||||
SlavePTY(MasterPTY&, unsigned index);
|
||||
|
||||
|
|
|
@ -26,6 +26,9 @@ private:
|
|||
virtual void on_tty_write(const byte*, size_t) override;
|
||||
virtual String tty_name() const override;
|
||||
|
||||
// ^CharacterDevice
|
||||
virtual const char* class_name() const override { return "VirtualConsole"; }
|
||||
|
||||
void set_active(bool);
|
||||
void on_char(byte);
|
||||
|
||||
|
|
|
@ -29,6 +29,8 @@ public:
|
|||
|
||||
virtual int ioctl(Process&, unsigned request, unsigned arg);
|
||||
|
||||
virtual const char* class_name() const = 0;
|
||||
|
||||
protected:
|
||||
CharacterDevice(unsigned major, unsigned minor) : m_major(major), m_minor(minor) { }
|
||||
|
||||
|
|
|
@ -297,6 +297,11 @@ String FileDescriptor::absolute_path()
|
|||
ksprintf(buf, "fifo:%x", m_fifo.ptr());
|
||||
return buf;
|
||||
}
|
||||
if (is_character_device()) {
|
||||
char buf[128];
|
||||
ksprintf(buf, "device:%u,%u (%s)", m_device->major(), m_device->minor(), m_device->class_name());
|
||||
return buf;
|
||||
}
|
||||
ASSERT(m_inode);
|
||||
return VFS::the().absolute_path(*m_inode);
|
||||
}
|
||||
|
|
|
@ -8,9 +8,12 @@ public:
|
|||
FullDevice();
|
||||
virtual ~FullDevice() override;
|
||||
|
||||
private:
|
||||
// ^CharacterDevice
|
||||
virtual ssize_t read(Process&, byte* buffer, size_t bufferSize) override;
|
||||
virtual ssize_t write(Process&, const byte* buffer, size_t bufferSize) override;
|
||||
virtual bool can_read(Process&) const override;
|
||||
virtual bool can_write(Process&) const override { return true; }
|
||||
virtual const char* class_name() const override { return "FullDevice"; }
|
||||
};
|
||||
|
||||
|
|
|
@ -8,9 +8,12 @@ public:
|
|||
NullDevice();
|
||||
virtual ~NullDevice() override;
|
||||
|
||||
private:
|
||||
// ^CharacterDevice
|
||||
virtual ssize_t read(Process&, byte* buffer, size_t bufferSize) override;
|
||||
virtual ssize_t write(Process&, const byte* buffer, size_t bufferSize) override;
|
||||
virtual bool can_write(Process&) const override { return true; }
|
||||
virtual bool can_read(Process&) const override;
|
||||
virtual const char* class_name() const override { return "CharacterDevice"; }
|
||||
};
|
||||
|
||||
|
|
|
@ -8,9 +8,12 @@ public:
|
|||
RandomDevice();
|
||||
virtual ~RandomDevice() override;
|
||||
|
||||
private:
|
||||
// ^CharacterDevice
|
||||
virtual ssize_t read(Process&, byte* buffer, size_t bufferSize) override;
|
||||
virtual ssize_t write(Process&, const byte* buffer, size_t bufferSize) override;
|
||||
virtual bool can_read(Process&) const override;
|
||||
virtual bool can_write(Process&) const override { return true; }
|
||||
virtual const char* class_name() const override { return "RandomDevice"; }
|
||||
};
|
||||
|
||||
|
|
|
@ -8,9 +8,12 @@ public:
|
|||
ZeroDevice();
|
||||
virtual ~ZeroDevice() override;
|
||||
|
||||
private:
|
||||
// ^CharacterDevice
|
||||
virtual ssize_t read(Process&, byte* buffer, size_t bufferSize) override;
|
||||
virtual ssize_t write(Process&, const byte* buffer, size_t bufferSize) override;
|
||||
virtual bool can_read(Process&) const override;
|
||||
virtual bool can_write(Process&) const override { return true; }
|
||||
virtual const char* class_name() const override { return "ZeroDevice"; }
|
||||
};
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue