From b48159dce258fda4a5e570ff3485be0079e6e25f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Duval?= Date: Sat, 31 Oct 2020 17:05:39 +0100 Subject: [PATCH] POSIX: add tcgetsid() MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: If58141b4e56b7fe444460b6808e33abc5ea71f37 Reviewed-on: https://review.haiku-os.org/c/haiku/+/3374 Reviewed-by: Axel Dörfler --- headers/posix/termios.h | 2 ++ src/add-ons/kernel/drivers/tty/tty.cpp | 9 +++++++++ src/system/libroot/posix/termios.c | 13 +++++++++++++ 3 files changed, 24 insertions(+) diff --git a/headers/posix/termios.h b/headers/posix/termios.h index 141746eb23..e8ec24428a 100644 --- a/headers/posix/termios.h +++ b/headers/posix/termios.h @@ -187,6 +187,7 @@ struct termios { #define TIOCCBRK (TCGETA + 21) /* both are a frontend to TCSBRK */ #define TIOCMBIS (TCGETA + 22) /* set bits in line state */ #define TIOCMBIC (TCGETA + 23) /* clear bits in line state */ +#define TIOCGSID (TCGETA + 24) /* get session leader process group ID */ /* Event codes. Returned from TCWAITEVENT */ #define EV_RING 0x0001 @@ -233,6 +234,7 @@ extern int tcsendbreak(int fd, int duration); extern int tcdrain(int fd); extern int tcflow(int fd, int action); extern int tcflush(int fd, int queueSelector); +extern pid_t tcgetsid(int fd); #ifdef __cplusplus } diff --git a/src/add-ons/kernel/drivers/tty/tty.cpp b/src/add-ons/kernel/drivers/tty/tty.cpp index 95e53ed478..0117696b44 100644 --- a/src/add-ons/kernel/drivers/tty/tty.cpp +++ b/src/add-ons/kernel/drivers/tty/tty.cpp @@ -1679,6 +1679,15 @@ tty_ioctl(tty_cookie* cookie, uint32 op, void* buffer, size_t length) return B_OK; } + // get session leader process group ID + + case TIOCGSID: + { + TRACE(("tty: get session_id\n")); + return user_memcpy(buffer, &tty->settings->session_id, + sizeof(pid_t)); + } + // get and set window size case TIOCGWINSZ: diff --git a/src/system/libroot/posix/termios.c b/src/system/libroot/posix/termios.c index f60602eb7e..18b9c96c2f 100644 --- a/src/system/libroot/posix/termios.c +++ b/src/system/libroot/posix/termios.c @@ -167,3 +167,16 @@ cfmakeraw(struct termios *termios) termios->c_cflag &= ~(CSIZE | PARENB); termios->c_cflag |= CS8; } + + +pid_t +tcgetsid(int fd) +{ + int sid; + + if (ioctl(fd, TIOCGSID, &sid) == 0) + return sid; + + return -1; +} +