summaryrefslogtreecommitdiffstats
path: root/lib/libc/gen/termios.c
diff options
context:
space:
mode:
authored <ed@FreeBSD.org>2009-05-07 13:49:48 +0000
committered <ed@FreeBSD.org>2009-05-07 13:49:48 +0000
commitf8170e41fe131d129edab0370716adf666f67cea (patch)
tree20c0656b6a881111e7bd254adf5f19151c541199 /lib/libc/gen/termios.c
parente0ce6b415e3db13761dcef8945261fbfb00cde10 (diff)
downloadFreeBSD-src-f8170e41fe131d129edab0370716adf666f67cea.zip
FreeBSD-src-f8170e41fe131d129edab0370716adf666f67cea.tar.gz
Add tcsetsid(3).
The entire world seems to use the non-standard TIOCSCTTY ioctl to make a TTY a controlling terminal of a session. Even though tcsetsid(3) is also non-standard, I think it's a lot better to use in our own source code, mainly because it's similar to tcsetpgrp(), tcgetpgrp() and tcgetsid(). I stole the idea from QNX. They do it the other way around; their TIOCSCTTY is just a wrapper around tcsetsid(). tcsetsid() then calls into an IPC framework.
Diffstat (limited to 'lib/libc/gen/termios.c')
-rw-r--r--lib/libc/gen/termios.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/lib/libc/gen/termios.c b/lib/libc/gen/termios.c
index 4c6dcff..85ca4e3 100644
--- a/lib/libc/gen/termios.c
+++ b/lib/libc/gen/termios.c
@@ -110,6 +110,18 @@ tcgetsid(int fd)
return ((pid_t)s);
}
+int
+tcsetsid(int fd, pid_t pid)
+{
+
+ if (pid != getsid(0)) {
+ errno = EINVAL;
+ return (-1);
+ }
+
+ return (_ioctl(fd, TIOCSCTTY, NULL));
+}
+
speed_t
cfgetospeed(t)
const struct termios *t;
OpenPOWER on IntegriCloud