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


Hi,

There was neither comment nor commit about this:

Samuel Thibault, le Sat 08 Sep 2007 02:53:04 +0200, a écrit :
> 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]