libc/termios: Sync a bit with FreeBSD.
authorSascha Wildner <saw@online.de>
Sat, 5 May 2018 20:12:02 +0000 (22:12 +0200)
committerSascha Wildner <saw@online.de>
Sat, 5 May 2018 20:12:02 +0000 (22:12 +0200)
Add tcsetsid() to libc.

Taken-from:     FreeBSD
Dports-testing: zrj

lib/libc/gen/Makefile.inc
lib/libc/gen/Symbol.map
lib/libc/gen/tcgetsid.3
lib/libc/gen/tcsetsid.3 [copied from lib/libc/gen/tcgetsid.3 with 58% similarity]
lib/libc/gen/termios.c
sys/sys/param.h
sys/sys/termios.h

index 3dc82ee..76a2c19 100644 (file)
@@ -78,7 +78,7 @@ MAN+= alarm.3 arc4random.3 clock.3 \
        scandir.3 setjmp.3 setmode.3 setproctitle.3 shm_open.3 \
        siginterrupt.3 signal.3 sigsetops.3 sleep.3 stringlist.3 \
        strtofflags.3 sysconf.3 sysctl.3 syslog.3 tcgetpgrp.3 tcgetsid.3 \
-       tcsendbreak.3 tcsetattr.3 tcsetpgrp.3 time.3 times.3 \
+       tcsendbreak.3 tcsetattr.3 tcsetpgrp.3 tcsetsid.3 time.3 times.3 \
        ttyname.3 tzset.3 ualarm.3 \
        ucontext.3 ulimit.3 uname.3 unvis.3 usleep.3 utime.3 \
        valloc.3 vis.3 wordexp.3
index 92af432..013305a 100644 (file)
@@ -487,6 +487,7 @@ DF504.0 {
     strsvis;
     strsvisx;
     svis;
+    tcsetsid;
     uid_from_user;
 };
 
index 92b6b33..f47c497 100644 (file)
@@ -24,7 +24,7 @@
 .\"
 .\" $FreeBSD: src/lib/libc/gen/tcgetsid.3,v 1.1 2008/04/15 08:33:32 davidxu Exp $
 .\"
-.Dd April 15, 2008
+.Dd May 5, 2018
 .Dt TCGETSID 3
 .Os
 .Sh NAME
@@ -63,7 +63,8 @@ is not the controlling terminal.
 .Sh SEE ALSO
 .Xr getsid 2 ,
 .Xr setsid 2 ,
-.Xr tcgetpgrp 3
+.Xr tcgetpgrp 3 ,
+.Xr tcsetsid 3
 .Sh STANDARDS
 The
 .Fn tcgetsid
similarity index 58%
copy from lib/libc/gen/tcgetsid.3
copy to lib/libc/gen/tcsetsid.3
index 92b6b33..188f221 100644 (file)
@@ -1,4 +1,4 @@
-.\" Copyright (c) 2008 David Xu <davidxu@freebsd.org>
+.\" Copyright (c) 2009 Ed Schouten <ed@FreeBSD.org>
 .\" All rights reserved.
 .\"
 .\" Redistribution and use in source and binary forms, with or without
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\" $FreeBSD: src/lib/libc/gen/tcgetsid.3,v 1.1 2008/04/15 08:33:32 davidxu Exp $
+.\" $FreeBSD: head/lib/libc/gen/tcsetsid.3 191882 2009-05-07 13:49:48Z ed $
 .\"
-.Dd April 15, 2008
-.Dt TCGETSID 3
+.Dd May 5, 2018
+.Dt TCSETSID 3
 .Os
 .Sh NAME
-.Nm tcgetsid
-.Nd get session ID associated with a controlling terminal
+.Nm tcsetsid
+.Nd set session ID associated with a controlling terminal
 .Sh LIBRARY
 .Lb libc
 .Sh SYNOPSIS
 .In sys/types.h
 .In termios.h
-.Ft pid_t
-.Fn tcgetsid "int fd"
+.Ft int
+.Fn tcsetsid "int fd" "pid_t pid"
 .Sh DESCRIPTION
 The
-.Fn tcgetsid
-function returns the process group ID of the session leader for a
-controlling terminal specified by
+.Fn tcsetsid
+function sets associates a session identified by
+.Fa pid
+with a controlling terminal specified by
 .Fa fd .
+.Pp
+This implementation only allows the controlling terminal to be changed
+by the session leader itself.
+This implies that
+.Fa pid
+always has to be equal to the process ID.
+.Pp
+It is unsupported to associate with a terminal that already has an
+associated session.
+Conversely, it is also unsupported to associate to a terminal when
+the session is already associated with a different terminal.
 .Sh ERRORS
 If an error occurs,
-.Fn tcgetsid
+.Fn tcsetsid
 returns -1 and the global variable
 .Va errno
 is set to indicate the error, as follows:
@@ -55,17 +67,26 @@ The
 .Fa fd
 argument is not a valid file descriptor.
 .It Bq Er ENOTTY
-The calling process does not have a controlling terminal or the
-underlying terminal device represented by
+The file descriptor represented by
 .Fa fd
-is not the controlling terminal.
+is not a terminal.
+.It Bq Er EINVAL
+The
+.Fa pid
+argument is not equal to the session ID of the calling process.
+.It Bq Er EPERM
+The calling process is not a session leader.
+.It Bq Er EPERM
+The session already has an associated terminal or the terminal already
+has an associated session.
 .El
 .Sh SEE ALSO
 .Xr getsid 2 ,
 .Xr setsid 2 ,
-.Xr tcgetpgrp 3
-.Sh STANDARDS
-The
-.Fn tcgetsid
-function conforms to
-.St -xpg4.2 .
+.Xr tcgetpgrp 3 ,
+.Xr tcgetsid 3
+.Sh HISTORY
+A
+.Fn tcsetsid
+function first appeared in QNX.
+It does not comply to any standard.
index 24fa4b5..d2b12af 100644 (file)
@@ -1,4 +1,6 @@
 /*-
+ * SPDX-License-Identifier: BSD-3-Clause
+ *
  * Copyright (c) 1989, 1993
  *     The Regents of the University of California.  All rights reserved.
  *
@@ -26,9 +28,8 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $FreeBSD: src/lib/libc/gen/termios.c,v 1.9.2.1 2000/03/18 23:13:25 jasone Exp $
- *
  * @(#)termios.c       8.2 (Berkeley) 2/21/94
+ * $FreeBSD: head/lib/libc/gen/termios.c 326025 2017-11-20 19:49:47Z pfg $
  */
 
 #include "namespace.h"
@@ -105,6 +106,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(const struct termios *t)
 {
index f36597a..de52dfc 100644 (file)
  * 500304 - remove IPSEC/FAST_IPSEC
  * 500305 - remove <sys/ioctl_compat.h> for good
  * 500306 - strsuftoll(), strsuftollx()
+ * 500307 - tcsetsid()
  */
 #undef __DragonFly_version
-#define __DragonFly_version 500306     /* propagated to newvers */
+#define __DragonFly_version 500307     /* propagated to newvers */
 
 #include <sys/_null.h>
 
index fa0e17f..698d457 100644 (file)
@@ -84,6 +84,7 @@ pid_t tcgetsid(int);
 void   cfmakeraw(struct termios *);
 void   cfmakesane(struct termios *);
 int    cfsetspeed(struct termios *, speed_t);
+int    tcsetsid(int, pid_t);
 #endif /* __BSD_VISIBLE */
 __END_DECLS