This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: TAB*, NL*, BS* etc in <sys/ioctls.h> in GNU/Hurd and GNU/BSD


Roland McGrath, le Fri 07 Sep 2007 17:26:46 -0700, a écrit :
> > Erf, defining OLCUC to 0x10 was actually a bad idea since it's OCRNL in
> > BSD's oflags.  In the patch below I used bit 7 since in BSD ioctl that
> > was EVENP which is !PARODD cflag in termio. But maybe BSD people will
> > define a flag for bit 7 someday so we should choose something else?
> 
> OLCUC is a c_oflag bit.  It only matters that it not conflict with other
> c_oflag bits.

Did all the old BSD ioctl flags get an equivalent in the termios
interface?  If not, it matters that OLCUC's value in oflag won't
conflict with a value of an old BSD ioctl flag which would get added
without name change into termios' oflags.

> Since 0x80 is the next one BSD would add for something else,
> it might be better to use a higher bit.

Ok.

> > There's also a problem with BSD's CDTRCTS, which is CRTS_IFLOW in GNU
> > (part of CRTSCTS).  I don't see how to fix it without either not support
> > DTR/CTS on GNU or make existing binaries that use RTSCTS suddenly try to
> > use DTR/CTS too (or just half of it).
> 
> The Hurd term server doesn't actually support any of those bits, so there
> is no practical compatibility problem with changing them for GNU.  Neither
> BSD nor Linux supports separate CRTS_IFLOW and CCTS_OFLOW bits, just a
> single CRTSCTS bit.  So I think it is fine to just harmonize completely
> with the BSD bits here.

Ok.

> > +# ifdef BS1
> > +#  undef 
> > +# endif
> 
> Need VT[01] in these lists too.

These are not defined in the old BSD ioctl interface, so they don't
conflict.

> > +#endif /* __USE_MISC || __USE_XOPEN */
> > +#define VTDLY	(1 << 20)	/* VT delay.  */
> > +#define VT0	(0 << 20)	/* VT delay type 0.  */
> > +#define VT1	(1 << 20)	/* VT delay type 1.  */
> 
> These belong inside that #if.

Then the linux versions need that fix too.

> > +#ifdef	__USE_BSD
> > +#define B7200	7200
> > +#define B14400	14400
> > +#define B28800	28800
> > +#define B76800	76800
> > +#endif
> >  #define	B57600	57600
> 
> There's no need to protect these.  B[0-9]+ are all allowed.

Ok.

Samuel

2007-09-08  Samuel Thibault  <samuel.thibault@ens-lyon.org>

	* bits/ioctls.h (NL0, NL1, TAB0, TAB1, TAB2, CR0, CR1, CR2, CR3, FF0,
	FF1, BS0, BS1): Undefine these at start if they are already defined to
	avoid collision with termios.h.
	(NLDLY, TABDLY, CRDLY, VTDLY, BSDLY): Remove macros.
	* bits/termios.h [__USE_MISC || __USE_XOPEN] (NL0, NL1, TAB0,
	TAB1, TAB2, CR0, CR1, CR2, CR3, FF0, FF1, BS0, BS1): Likewise.
	(OLCUC): Change value of macro.
	[__USE_BSD || __USE_XOPEN] (OCRNL, ONOCR, ONLRET): New macros.
	[__USE_MISC || __USE_XOPEN] (NLDLY, NL0, NL1, TABDLY, TAB0, TAB1, TAB2,
	TAB3, CRDLY, CR0, CR1, CR2, CR3, FFDLY, FF0, FF1, BSDLY, BS0, BS1): New
	macros.
	[__USE_BSD] (CRTSCTS): Change value.
	(CRTS_IFLOW, CCTS_OFLOW): Change into compatibility macros.
	(CDTRCTS, CHWFLOW): New macros.
	[__USE_BSD] (B7200, B14400, B28800, B76800): New macros.
	(VTDLY, VT0, VT1): New macros.

Index: sysdeps/mach/hurd/bits/ioctls.h
===================================================================
RCS file: /cvs/glibc/libc/sysdeps/mach/hurd/bits/ioctls.h,v
retrieving revision 1.10
diff -u -p -r1.10 ioctls.h
--- sysdeps/mach/hurd/bits/ioctls.h	7 Sep 2007 20:38:57 -0000	1.10
+++ sysdeps/mach/hurd/bits/ioctls.h	8 Sep 2007 00:48:57 -0000
@@ -25,6 +25,46 @@
 
 /* These macros are also defined in <bits/termios.h> (with numerically
    identical values) but this serves to shut up cpp's complaining. */
+
+#ifdef NL0
+# undef 
+#endif
+#ifdef NL1
+# undef 
+#endif
+#ifdef TAB0
+# undef 
+#endif
+#ifdef TAB1
+# undef 
+#endif
+#ifdef TAB2
+# undef 
+#endif
+#ifdef CR0
+# undef 
+#endif
+#ifdef CR1
+# undef 
+#endif
+#ifdef CR2
+# undef 
+#endif
+#ifdef CR3
+# undef 
+#endif
+#ifdef FF0
+# undef 
+#endif
+#ifdef FF1
+# undef 
+#endif
+#ifdef BS0
+# undef 
+#endif
+#ifdef BS1
+# undef 
+#endif
 #ifdef MDMBUF
 # undef MDMBUF
 #endif
@@ -284,31 +324,25 @@ enum __ioctl_datum { IOC_8, IOC_16, IOC_
 #define		ODDP		0x00000040	/* get/send odd parity */
 #define		EVENP		0x00000080	/* get/send even parity */
 #define		ANYP		0x000000c0	/* get any parity/send none */
-#define		NLDLY		0x00000300	/* \n delay */
-#define		NLDELAY		NLDLY		/* traditional BSD name */
+#define		NLDELAY		0x00000300	/* \n delay */
 #define			NL0	0x00000000
 #define			NL1	0x00000100	/* tty 37 */
 #define			NL2	0x00000200	/* vt05 */
 #define			NL3	0x00000300
-#define		TABDLY		0x00000c00	/* horizontal tab delay */
-#define		TBDELAY		TABDLY		/* traditional BSD name */
+#define		TBDELAY		0x00000c00	/* horizontal tab delay */
 #define			TAB0	0x00000000
 #define			TAB1	0x00000400	/* tty 37 */
 #define			TAB2	0x00000800
-#define			TAB3	0x00000c00
 #define		XTABS		0x00000c00	/* expand tabs on output */
-#define		CRDLY		0x00003000	/* \r delay */
-#define		CRDELAY		CRDLY		/* traditional BSD name */
+#define		CRDELAY		0x00003000	/* \r delay */
 #define			CR0	0x00000000
 #define			CR1	0x00001000	/* tn 300 */
 #define			CR2	0x00002000	/* tty 37 */
 #define			CR3	0x00003000	/* concept 100 */
-#define		VTDLY		0x00004000	/* vertical tab delay */
-#define		VTDELAY		VTDLY		/* traditional BSD name */
+#define		VTDELAY		0x00004000	/* vertical tab delay */
 #define			FF0	0x00000000
 #define			FF1	0x00004000	/* tty 37 */
-#define		BSDLY		0x00008000	/* \b delay */
-#define		BSDELAY		BSDLY		/* traditional BSD name */
+#define		BSDELAY		0x00008000	/* \b delay */
 #define			BS0	0x00000000
 #define			BS1	0x00008000
 #define		ALLDELAY	(NLDELAY|TBDELAY|CRDELAY|VTDELAY|BSDELAY)
Index: bits/termios.h
===================================================================
RCS file: /cvs/glibc/libc/bits/termios.h,v
retrieving revision 1.7
diff -u -p -r1.7 termios.h
--- bits/termios.h	26 Jul 2001 21:23:31 -0000	1.7
+++ bits/termios.h	8 Sep 2007 00:48:55 -0000
@@ -24,6 +24,50 @@
 /* These macros are also defined in some <bits/ioctls.h> files (with
    numerically identical values), but this serves to shut up cpp's
    complaining. */
+#if defined __USE_MISC || defined __USE_XOPEN
+
+# ifdef NL0
+#  undef 
+# endif
+# ifdef NL1
+#  undef 
+# endif
+# ifdef TAB0
+#  undef 
+# endif
+# ifdef TAB1
+#  undef 
+# endif
+# ifdef TAB2
+#  undef 
+# endif
+# ifdef CR0
+#  undef 
+# endif
+# ifdef CR1
+#  undef 
+# endif
+# ifdef CR2
+#  undef 
+# endif
+# ifdef CR3
+#  undef 
+# endif
+# ifdef FF0
+#  undef 
+# endif
+# ifdef FF1
+#  undef 
+# endif
+# ifdef BS0
+#  undef 
+# endif
+# ifdef BS1
+#  undef 
+# endif
+
+#endif /* __USE_MISC || __USE_XOPEN */
+
 #ifdef __USE_BSD
 
 # ifdef MDMBUF
@@ -93,11 +137,40 @@ struct termios
 #define	OPOST	(1 << 0)	/* Perform output processing.  */
 #ifdef	__USE_BSD
 # define ONLCR	(1 << 1)	/* Map NL to CR-NL on output.  */
-# define OXTABS	(1 << 2)	/* Expand tabs to spaces.  */
+# define OXTABS	TAB3		/* Expand tabs to spaces.  */
 # define ONOEOT	(1 << 3)	/* Discard EOT (^D) on output.  */
 #endif
+#if defined __USE_BSD || defined __USE_XOPEN
+# define OCRNL	(1 << 4)	/* Map CR to NL.  */
+# define ONOCR	(1 << 5)	/* Discard CR's when on column 0.  */
+# define ONLRET	(1 << 6)	/* Move to column 0 on NL.  */
+#endif
+#if defined __USE_MISC || defined __USE_XOPEN
+# define NLDLY	(3 << 8)	/* NL delay.  */
+# define NL0	(0 << 8)	/* NL type 0.  */
+# define NL1	(1 << 8)	/* NL type 1.  */
+# define TABDLY	(3 << 10)	/* TAB delay.  */
+# define TAB0	(0 << 10)	/* TAB delay type 0.  */
+# define TAB1	(1 << 10)	/* TAB delay type 1.  */
+# define TAB2	(2 << 10)	/* TAB delay type 2.  */
+# define TAB3	(1 << 2)	/* Expand tabs to spaces.  */
+# define CRDLY	(3 << 12)	/* CR delay.  */
+# define CR0	(0 << 12)	/* CR delay type 0.  */
+# define CR1	(1 << 12)	/* CR delay type 1.  */
+# define CR2	(2 << 12)	/* CR delay type 2.  */
+# define CR3	(3 << 12)	/* CR delay type 3.  */
+# define FFDLY	(1 << 14)	/* FF delay.  */
+# define FF0	(0 << 14)	/* FF delay type 0.  */
+# define FF1	(1 << 14)	/* FF delay type 1.  */
+# define BSDLY	(1 << 15)	/* BS delay.  */
+# define BS0	(0 << 15)	/* BS delay type 0.  */
+# define BS1	(1 << 15)	/* BS delay type 1.  */
+# define VTDLY	(1 << 20)	/* VT delay.  */
+# define VT0	(0 << 20)	/* VT delay type 0.  */
+# define VT1	(1 << 20)	/* VT delay type 1.  */
+#endif /* __USE_MISC || __USE_XOPEN */
 #ifdef __USE_GNU
-# define OLCUC	(1 << 9)	/* Translate lower case output to upper case */
+# define OLCUC	(1 << 22)	/* Translate lower case output to upper case */
 #endif
 
   /* Control modes.  */
@@ -117,10 +190,12 @@ struct termios
 #define	HUPCL	(1 << 14)	/* Hang up on last close.  */
 #define	CLOCAL	(1 << 15)	/* Ignore modem status lines.  */
 #ifdef	__USE_BSD
-# define CCTS_OFLOW	(1 << 16)	/* CTS flow control of output.  */
-# define CRTS_IFLOW	(1 << 17)	/* RTS flow control of input.  */
-# define CRTSCTS	(CCTS_OFLOW|CRTS_IFLOW)	/* CTS/RTS flow control.  */
-# define MDMBUF		(1 << 20)	/* Carrier flow control of output.  */
+# define CRTSCTS	(1 << 16)	/* RTS/CTS flow control.  */
+# define CRTS_IFLOW	CRTSCTS		/* Compatibility.  */
+# define CCTS_OFLOW	CRTSCTS		/* Compatibility.  */
+# define CDTRCTS	(1 << 17)	/* DTR/CTS flow control.  */
+# define MDMBUF		(1 << 20)	/* DTR/DCD flow control.  */
+# define CHWFLOW	(MDMBUF|CRTSCTS|CDTRCTS) /* All types of flow control.  */
 #endif
 
   /* Local modes.  */
@@ -210,13 +285,17 @@ struct termios
 #define	B2400	2400		/* 2400 baud.  */
 #define	B4800	4800		/* 4800 baud.  */
 #define	B9600	9600		/* 9600 baud.  */
+#define	B7200	7200		/* 7200 baud.  */
+#define	B14400	14400		/* 14400 baud.  */
 #define	B19200	19200		/* 19200 baud.  */
+#define	B28800	28800		/* 28800 baud.  */
 #define	B38400	38400		/* 38400 baud.  */
 #ifdef	__USE_MISC
 # define EXTA	19200
 # define EXTB	38400
 #endif
 #define	B57600	57600
+#define	B76800	76800
 #define	B115200	115200
 #define	B230400	230400
 #define	B460800	460800


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]