libc/termios: Add cfmakesane().
authorSascha Wildner <saw@online.de>
Sun, 10 Dec 2017 07:08:27 +0000 (08:08 +0100)
committerSascha Wildner <saw@online.de>
Sun, 10 Dec 2017 07:14:14 +0000 (08:14 +0100)
This makes net/bsdrcmds build, in preparation for removing rcp, rlogin,
rlogind, rsh and rshd from base.

Taken-from: FreeBSD

lib/libc/Versions.def
lib/libc/gen/Makefile.inc
lib/libc/gen/Symbol.map
lib/libc/gen/tcsetattr.3
lib/libc/gen/termios.c
sys/sys/param.h
sys/sys/termios.h

index 4542350..16abb4f 100644 (file)
@@ -33,6 +33,10 @@ DF408.0 {
 DF410.0 {
 } DF408.0;
 
+# version for DragonFly 5.1
+DF502.0 {
+} DF410.0;
+
 # This is our private namespace.  Any global interfaces that are
 # strictly for use only by other DragonFly applications and libraries
 # are listed here.  We use a separate namespace so we can write
index 5ea0977..04f54f3 100644 (file)
@@ -195,7 +195,8 @@ MLINKS+=syslog.3 closelog.3 syslog.3 openlog.3 syslog.3 setlogmask.3 \
        syslog.3 vsyslog.3
 MLINKS+=tcsendbreak.3 tcdrain.3 tcsendbreak.3 tcflow.3 tcsendbreak.3 tcflush.3
 MLINKS+=tcsetattr.3 cfgetispeed.3 tcsetattr.3 cfgetospeed.3 \
-       tcsetattr.3 cfmakeraw.3 tcsetattr.3 cfsetispeed.3 \
+       tcsetattr.3 cfmakeraw.3 tcsetattr.3 cfmakesane.3 \
+       tcsetattr.3 cfsetispeed.3 \
        tcsetattr.3 cfsetospeed.3 tcsetattr.3 cfsetspeed.3 \
        tcsetattr.3 tcgetattr.3
 MLINKS+=ttyname.3 isatty.3 ttyname.3 ttyslot.3 ttyname.3 ttyname_r.3
index 56a82b6..e513a5c 100644 (file)
@@ -466,6 +466,10 @@ DF410.0 {
     pthread_getthreadid_np;
 };
 
+DF502.0 {
+    cfmakesane;
+};
+
 DFprivate_1.0 {
        /* pthread stubs */
     _pthread_atfork;
index e131df2..963edba 100644 (file)
@@ -28,7 +28,7 @@
 .\"    @(#)tcsetattr.3 8.3 (Berkeley) 1/2/94
 .\" $FreeBSD: src/lib/libc/gen/tcsetattr.3,v 1.6.2.4 2002/12/29 16:35:34 schweikh Exp $
 .\"
-.Dd August 10, 2016
+.Dd December 10, 2017
 .Dt TCSETATTR 3
 .Os
 .Sh NAME
@@ -38,6 +38,7 @@
 .Nm cfsetospeed ,
 .Nm cfsetspeed ,
 .Nm cfmakeraw ,
+.Nm cfmakesane ,
 .Nm tcgetattr ,
 .Nm tcsetattr
 .Nd manipulating the termios structure
@@ -57,6 +58,8 @@
 .Fn cfsetspeed "struct termios *t" "speed_t speed"
 .Ft void
 .Fn cfmakeraw "struct termios *t"
+.Ft void
+.Fn cfmakesane "struct termios *t"
 .Ft int
 .Fn tcgetattr "int fd" "struct termios *t"
 .Ft int
@@ -64,6 +67,7 @@
 .Sh DESCRIPTION
 The
 .Fn cfmakeraw ,
+.Fn cfmakesane ,
 .Fn tcgetattr
 and
 .Fn tcsetattr
@@ -192,14 +196,20 @@ The
 .Fn cfmakeraw
 function sets the flags stored in the termios structure to a state disabling
 all input and output processing, giving a
-.Dq raw I/O path .
+.Dq raw I/O path ,
+while the
+.Fn cfmakesane
+function sets them to a state similar to those of a newly created
+terminal device.
 It should be noted that there is no function to reverse this effect.
 This is because there are a variety of processing options that could be
 re-enabled and the correct method is for an application to snapshot the
 current terminal state using the function
 .Fn tcgetattr ,
-setting raw mode with
+setting raw or sane mode with
 .Fn cfmakeraw
+or
+.Fn cfmakesane
 and the subsequent
 .Fn tcsetattr ,
 and then using another
@@ -329,7 +339,8 @@ functions are expected to be compliant with the
 .St -p1003.1-88
 specification.
 The
-.Fn cfmakeraw
+.Fn cfmakeraw ,
+.Fn cfmakesane
 and
 .Fn cfsetspeed
 functions,
index 19e84cc..24fa4b5 100644 (file)
@@ -27,7 +27,6 @@
  * SUCH DAMAGE.
  *
  * $FreeBSD: src/lib/libc/gen/termios.c,v 1.9.2.1 2000/03/18 23:13:25 jasone Exp $
- * $DragonFly: src/lib/libc/gen/termios.c,v 1.5 2005/11/19 22:32:53 swildner Exp $
  *
  * @(#)termios.c       8.2 (Berkeley) 2/21/94
  */
@@ -39,6 +38,8 @@
 #include <sys/time.h>
 
 #include <errno.h>
+#include <string.h>
+#define        TTYDEFCHARS
 #include <termios.h>
 #include <unistd.h>
 #include "un-namespace.h"
@@ -160,6 +161,22 @@ cfmakeraw(struct termios *t)
        t->c_cc[VTIME] = 0;
 }
 
+/*
+ * Obtain a termios structure which is similar to the one provided by
+ * the kernel.
+ */
+void
+cfmakesane(struct termios *t)
+{
+       t->c_cflag = TTYDEF_CFLAG;
+       t->c_iflag = TTYDEF_IFLAG;
+       t->c_lflag = TTYDEF_LFLAG;
+       t->c_oflag = TTYDEF_OFLAG;
+       t->c_ispeed = TTYDEF_SPEED;
+       t->c_ospeed = TTYDEF_SPEED;
+       memcpy(&t->c_cc, ttydefchars, sizeof ttydefchars);
+}
+
 int
 tcsendbreak(int fd, int len __unused)
 {
index 6c5320f..b3718d8 100644 (file)
  * 500101 - kernel ppp removal
  * 500102 - <sys/sysref{,2}.h> inclusions removed from some public headers
  * 500103 - faith removal
+ * 500104 - cfmakesane()
  */
 #undef __DragonFly_version
-#define __DragonFly_version 500103     /* propagated to newvers */
+#define __DragonFly_version 500104     /* propagated to newvers */
 
 #include <sys/_null.h>
 
index 3b75a96..fa0e17f 100644 (file)
@@ -82,6 +82,7 @@ pid_t tcgetsid(int);
 
 #if __BSD_VISIBLE
 void   cfmakeraw(struct termios *);
+void   cfmakesane(struct termios *);
 int    cfsetspeed(struct termios *, speed_t);
 #endif /* __BSD_VISIBLE */
 __END_DECLS