Procházet zdrojové kódy

Kernel/TTY: Implement TIOCGPTN ioctl for MasterPTY

This ioctl operation will allow userspace to determine the index number
of a MasterPTY after opening /dev/ptmx and actually getting an internal
file descriptor of MasterPTY.
Liav A před 3 roky
rodič
revize
5ffe2f117c

+ 10 - 2
Kernel/TTY/MasterPTY.cpp

@@ -125,9 +125,17 @@ ErrorOr<void> MasterPTY::ioctl(OpenFileDescription& description, unsigned reques
     TRY(Process::current().require_promise(Pledge::tty));
     if (!m_slave)
         return EIO;
-    if (request == TIOCSWINSZ || request == TIOCGPGRP)
+    switch (request) {
+    case TIOCGPTN: {
+        int master_pty_index = index();
+        return copy_to_user(static_ptr_cast<int*>(arg), &master_pty_index);
+    }
+    case TIOCSWINSZ:
+    case TIOCGPGRP:
         return m_slave->ioctl(description, request, arg);
-    return EINVAL;
+    default:
+        return EINVAL;
+    }
 }
 
 ErrorOr<NonnullOwnPtr<KString>> MasterPTY::pseudo_path(const OpenFileDescription&) const

+ 2 - 0
Userland/Libraries/LibC/sys/ioctl_numbers.h

@@ -89,6 +89,7 @@ enum IOCtlNumber {
     TIOCSTI,
     TIOCNOTTY,
     TIOCSWINSZ,
+    TIOCGPTN,
     FB_IOCTL_GET_PROPERTIES,
     FB_IOCTL_GET_HEAD_PROPERTIES,
     FB_IOCTL_SET_HEAD_RESOLUTION,
@@ -143,6 +144,7 @@ enum IOCtlNumber {
 #define TIOCSTI TIOCSTI
 #define TIOCNOTTY TIOCNOTTY
 #define TIOCSWINSZ TIOCSWINSZ
+#define TIOCGPTN TIOCGPTN
 #define FB_IOCTL_GET_PROPERTIES FB_IOCTL_GET_PROPERTIES
 #define FB_IOCTL_GET_HEAD_PROPERTIES FB_IOCTL_GET_HEAD_PROPERTIES
 #define FB_IOCTL_GET_HEAD_EDID FB_IOCTL_GET_HEAD_EDID