mirror of git://sourceware.org/git/glibc.git
Revert "Linux: Keep termios ioctl constants strictly internal"
This reverts commit 3d3572f590.
Reason for revert: TCGETS etc. work to some extent on at least
a subset of architectures, so there is no pressing need to force
applications off them. Removal of the macros breaks building
the sanitizers, impacting both GCC and LLVM.
Reviewed-by: Sam James <sam@gentoo.org>
This commit is contained in:
parent
c744519bad
commit
0f93d54cde
5
NEWS
5
NEWS
|
|
@ -46,11 +46,6 @@ Deprecated and removed features, and other changes affecting compatibility:
|
|||
obsolete since the very first version of POSIX.1 in 1988, replaced
|
||||
with <termios.h>.
|
||||
|
||||
* On Linux, the ioctl constants TCGETS, TCSETS, TCSETSF, TCSETSW,
|
||||
TCGETS2, TCSETS2, TCSETSF2, TCSETSW2 are no longer defined in
|
||||
<sys/ioctl.h>. Applications must use the high-level <termios.h>
|
||||
interfaces instead.
|
||||
|
||||
* The support for TX lock elision of pthread mutexes is deprecated on
|
||||
all architectures and will be removed in the next release.
|
||||
|
||||
|
|
|
|||
|
|
@ -425,8 +425,6 @@ sysdep_headers += \
|
|||
bits/termios-tcflow.h \
|
||||
# sysdep_headers
|
||||
|
||||
gen-as-const-headers += termios-kernel-consts.sym
|
||||
|
||||
tests += \
|
||||
tst-termios-linux \
|
||||
# tests
|
||||
|
|
|
|||
|
|
@ -0,0 +1,36 @@
|
|||
/* Copyright (C) 1996-2025 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library. If not, see
|
||||
<https://www.gnu.org/licenses/>. */
|
||||
|
||||
#ifndef _SYS_IOCTL_H
|
||||
# error "Never use <bits/ioctls.h> directly; include <sys/ioctl.h> instead."
|
||||
#endif
|
||||
|
||||
/* Use the definitions from the kernel header files. */
|
||||
#include <asm/ioctls.h>
|
||||
|
||||
/* Oh well, this is necessary since the kernel data structure is
|
||||
different from the user-level version. */
|
||||
#undef TCGETS
|
||||
#undef TCSETS
|
||||
#undef TCSETSW
|
||||
#undef TCSETSF
|
||||
#define TCGETS _IOR ('t', 19, char[44])
|
||||
#define TCSETS _IOW ('t', 20, char[44])
|
||||
#define TCSETSW _IOW ('t', 21, char[44])
|
||||
#define TCSETSF _IOW ('t', 22, char[44])
|
||||
|
||||
#include <linux/sockios.h>
|
||||
|
|
@ -0,0 +1,26 @@
|
|||
/* Architectural parameters for Linux termios - Alpha/PowerPC version
|
||||
|
||||
Copyright (C) 1997-2025 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library; if not, see
|
||||
<https://www.gnu.org/licenses/>. */
|
||||
|
||||
#ifndef TERMIOS_INTERNALS_H
|
||||
# error "<termios_arch.h> should only be included from <termios_internals.h>"
|
||||
#endif
|
||||
|
||||
#define _TERMIOS2_NCCS 19
|
||||
#define _HAVE_TERMIOS2_C_CC_BEFORE_C_LINE 1
|
||||
#define _HAVE_STRUCT_OLD_TERMIOS 0
|
||||
|
|
@ -22,18 +22,4 @@
|
|||
/* Use the definitions from the kernel header files. */
|
||||
#include <asm/ioctls.h>
|
||||
|
||||
/* The GNU C library has a different definition of struct termios,
|
||||
incompatible with what the ioctl interface expects. The existence
|
||||
of the termios2 ioctls is considered an implementation detail.
|
||||
Undefine all related ioctl constants. */
|
||||
#undef TCGETS
|
||||
#undef TCSETS
|
||||
#undef TCSETSF
|
||||
#undef TCSETSW
|
||||
#undef TCGETS2
|
||||
#undef TCSETS2
|
||||
#undef TCSETSF2
|
||||
#undef TCSETSW2
|
||||
|
||||
|
||||
#include <linux/sockios.h>
|
||||
|
|
|
|||
|
|
@ -0,0 +1,36 @@
|
|||
/* Copyright (C) 1996-2025 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library. If not, see
|
||||
<https://www.gnu.org/licenses/>. */
|
||||
|
||||
#ifndef _SYS_IOCTL_H
|
||||
# error "Never use <bits/ioctls.h> directly; include <sys/ioctl.h> instead."
|
||||
#endif
|
||||
|
||||
/* Use the definitions from the kernel header files. */
|
||||
#include <asm/ioctls.h>
|
||||
|
||||
/* Oh well, this is necessary since the kernel data structure is
|
||||
different from the user-level version. */
|
||||
#undef TCGETS
|
||||
#undef TCSETS
|
||||
#undef TCSETSW
|
||||
#undef TCSETSF
|
||||
#define TCGETS _IOR ('T', 16, char[36])
|
||||
#define TCSETS _IOW ('T', 17, char[36])
|
||||
#define TCSETSW _IOW ('T', 18, char[36])
|
||||
#define TCSETSF _IOW ('T', 19, char[36])
|
||||
|
||||
#include <linux/sockios.h>
|
||||
|
|
@ -24,6 +24,6 @@ int
|
|||
__isatty (int fd)
|
||||
{
|
||||
struct termios2 k_termios;
|
||||
return INLINE_SYSCALL_CALL (ioctl, fd, ARCH_TCGETS, &k_termios) == 0;
|
||||
return INLINE_SYSCALL_CALL (ioctl, fd, TCGETS2, &k_termios) == 0;
|
||||
}
|
||||
weak_alias (__isatty, isatty)
|
||||
|
|
|
|||
|
|
@ -22,5 +22,5 @@ int
|
|||
__isatty_nostatus (int fd)
|
||||
{
|
||||
struct termios2 k_termios;
|
||||
return INTERNAL_SYSCALL_CALL (ioctl, fd, ARCH_TCGETS, &k_termios) == 0;
|
||||
return INTERNAL_SYSCALL_CALL (ioctl, fd, TCGETS2, &k_termios) == 0;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
/* old_termios.h for MIPS.
|
||||
/* Architectural parameters for Linux termios - MIPS version
|
||||
|
||||
Copyright (C) 2025 Free Software Foundation, Inc.
|
||||
Copyright (C) 1991-2025 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
|
|
@ -17,15 +17,18 @@
|
|||
License along with the GNU C Library; if not, see
|
||||
<https://www.gnu.org/licenses/>. */
|
||||
|
||||
#define _TERMIOS2_NCCS 23
|
||||
#define _HAVE_TERMIOS2_C_CC_BEFORE_C_LINE 0
|
||||
|
||||
#define _HAVE_STRUCT_OLD_TERMIOS 1
|
||||
|
||||
#define OLD_NCCS 32
|
||||
typedef struct old_termios
|
||||
struct old_termios
|
||||
{
|
||||
tcflag_t c_iflag; /* input mode flags */
|
||||
tcflag_t c_oflag; /* output mode flags */
|
||||
tcflag_t c_cflag; /* control mode flags */
|
||||
tcflag_t c_lflag; /* local mode flags */
|
||||
cc_t c_line; /* line discipline */
|
||||
cc_t c_cc[OLD_NCCS]; /* control characters */
|
||||
} old_termios_t;
|
||||
tcflag_t c_iflag; /* input mode flags */
|
||||
tcflag_t c_oflag; /* output mode flags */
|
||||
tcflag_t c_cflag; /* control mode flags */
|
||||
tcflag_t c_lflag; /* local mode flags */
|
||||
cc_t c_line; /* line discipline */
|
||||
cc_t c_cc[OLD_NCCS]; /* control characters */
|
||||
};
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
/* Linux internal definitions for ioctl. powerpc version.
|
||||
/* Linux internal definitions for ioctl.
|
||||
Copyright (C) 2021-2025 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
|
|
@ -17,40 +17,27 @@
|
|||
<https://www.gnu.org/licenses/>. */
|
||||
|
||||
#include <termios.h>
|
||||
#include <termios_internals.h>
|
||||
#include <assert.h>
|
||||
|
||||
/* PowerPC quirk: on PowerPC only, ioctl() emulates the TCGETS/TCSETS*
|
||||
ioctls with tcgetattr/tcsetattr using the glibc struct termios.
|
||||
As struct termios2 is the same as the kernel struct termios on PowerPC,
|
||||
simply consider the kernel ones as the termios2 interface, even
|
||||
though the kernel doesn't call it that. */
|
||||
|
||||
#define GLIBC_TCGETS _IOR ('t', 19, struct termios)
|
||||
#define GLIBC_TCSETS _IOW ('t', 20, struct termios)
|
||||
#define GLIBC_TCSETSW _IOW ('t', 21, struct termios)
|
||||
#define GLIBC_TCSETSF _IOW ('t', 22, struct termios)
|
||||
|
||||
/* The user-visible size of struct termios has changed. Catch ioctl calls
|
||||
using the new-style struct termios, and translate them to old-style. */
|
||||
static inline bool
|
||||
__ioctl_arch (int *r, int fd, unsigned long request, void *arg)
|
||||
{
|
||||
static_assert (GLIBC_TCGETS != KERNEL_TCGETS2,
|
||||
"emulation not possible due to matching ioctl constants");
|
||||
switch (request)
|
||||
{
|
||||
case GLIBC_TCGETS:
|
||||
case TCGETS:
|
||||
*r = __tcgetattr (fd, (struct termios *) arg);
|
||||
break;
|
||||
|
||||
case GLIBC_TCSETS:
|
||||
case TCSETS:
|
||||
*r = __tcsetattr (fd, TCSANOW, (struct termios *) arg);
|
||||
break;
|
||||
|
||||
case GLIBC_TCSETSW:
|
||||
case TCSETSW:
|
||||
*r = __tcsetattr (fd, TCSADRAIN, (struct termios *) arg);
|
||||
break;
|
||||
|
||||
case GLIBC_TCSETSF:
|
||||
case TCSETSF:
|
||||
*r = __tcsetattr (fd, TCSAFLUSH, (struct termios *) arg);
|
||||
break;
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,33 @@
|
|||
/* Architectural parameters for Linux termios - PowerPC version
|
||||
|
||||
Copyright (C) 1997-2025 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library; if not, see
|
||||
<https://www.gnu.org/licenses/>. */
|
||||
|
||||
#define _TERMIOS2_NCCS 19
|
||||
#define _HAVE_TERMIOS2_C_CC_BEFORE_C_LINE 1
|
||||
#define _HAVE_STRUCT_OLD_TERMIOS 0
|
||||
|
||||
/* PowerPC quirk: on PowerPC only, ioctl() emulates the TCGETS/TCSETS*
|
||||
ioctls with tcgetattr/tcsetattr using the glibc struct termios.
|
||||
As struct termios2 is the same as the kernel struct termios on PowerPC,
|
||||
simply consider the kernel ones as the termios2 interface, even
|
||||
though the kernel doesn't call it that. */
|
||||
|
||||
#define TCGETS2 _IOR ('t', 19, struct termios2)
|
||||
#define TCSETS2 _IOW ('t', 20, struct termios2)
|
||||
#define TCSETSW2 _IOW ('t', 21, struct termios2)
|
||||
#define TCSETSF2 _IOW ('t', 22, struct termios2)
|
||||
|
|
@ -0,0 +1,36 @@
|
|||
/* Copyright (C) 1996-2025 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library; if not, see
|
||||
<https://www.gnu.org/licenses/>. */
|
||||
|
||||
#ifndef _SYS_IOCTL_H
|
||||
# error "Never use <bits/ioctls.h> directly; include <sys/ioctl.h> instead."
|
||||
#endif
|
||||
|
||||
/* Use the definitions from the kernel header files. */
|
||||
#include <asm/ioctls.h>
|
||||
|
||||
/* Oh well, this is necessary since the kernel data structure is
|
||||
different from the user-level version. */
|
||||
#undef TCGETS
|
||||
#undef TCSETS
|
||||
#undef TCSETSW
|
||||
#undef TCSETSF
|
||||
#define TCGETS _IOR ('T', 8, char[36])
|
||||
#define TCSETS _IOW ('T', 9, char[36])
|
||||
#define TCSETSW _IOW ('T', 10, char[36])
|
||||
#define TCSETSF _IOW ('T', 11, char[36])
|
||||
|
||||
#include <linux/sockios.h>
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
/* old_termios.h for SPARC.
|
||||
/* Architectural parameters for Linux termios - SPARC version
|
||||
|
||||
Copyright (C) 2025 Free Software Foundation, Inc.
|
||||
Copyright (C) 1991-2025 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
|
|
@ -17,15 +17,18 @@
|
|||
License along with the GNU C Library; if not, see
|
||||
<https://www.gnu.org/licenses/>. */
|
||||
|
||||
#define _TERMIOS2_NCCS 19
|
||||
#define _HAVE_TERMIOS2_C_CC_BEFORE_C_LINE 0
|
||||
|
||||
#define _HAVE_STRUCT_OLD_TERMIOS 1
|
||||
|
||||
#define OLD_NCCS 17
|
||||
typedef struct old_termios
|
||||
struct old_termios
|
||||
{
|
||||
tcflag_t c_iflag; /* input mode flags */
|
||||
tcflag_t c_oflag; /* output mode flags */
|
||||
tcflag_t c_cflag; /* control mode flags */
|
||||
tcflag_t c_lflag; /* local mode flags */
|
||||
cc_t c_line; /* line discipline */
|
||||
cc_t c_cc[OLD_NCCS]; /* control characters */
|
||||
} old_termios_t;
|
||||
tcflag_t c_iflag; /* input mode flags */
|
||||
tcflag_t c_oflag; /* output mode flags */
|
||||
tcflag_t c_cflag; /* control mode flags */
|
||||
tcflag_t c_lflag; /* local mode flags */
|
||||
cc_t c_line; /* line discipline */
|
||||
cc_t c_cc[OLD_NCCS]; /* control characters */
|
||||
};
|
||||
|
|
@ -22,7 +22,7 @@ int
|
|||
__tcgetattr (int fd, struct termios *termios_p)
|
||||
{
|
||||
struct termios2 k_termios;
|
||||
long int retval = INLINE_SYSCALL_CALL (ioctl, fd, ARCH_TCGETS, &k_termios);
|
||||
long int retval = INLINE_SYSCALL_CALL (ioctl, fd, TCGETS2, &k_termios);
|
||||
|
||||
if (__glibc_likely (retval != -1))
|
||||
{
|
||||
|
|
|
|||
|
|
@ -19,12 +19,6 @@
|
|||
|
||||
#define static_assert_equal(x,y) _Static_assert ((x) == (y), #x " != " #y)
|
||||
|
||||
static_assert_equal (sizeof (struct termios2), KERNEL_TERMIOS2_SIZE);
|
||||
static_assert_equal (offsetof (struct termios2, c_cc),
|
||||
KERNEL_TERMIOS2_CC_OFFSET);
|
||||
static_assert_equal (offsetof (struct termios2, c_line),
|
||||
KERNEL_TERMIOS2_LINE_OFFSET);
|
||||
|
||||
/* Set the state of FD to *TERMIOS_P. */
|
||||
int
|
||||
__tcsetattr (int fd, int optional_actions, const struct termios *termios_p)
|
||||
|
|
@ -59,10 +53,10 @@ __tcsetattr (int fd, int optional_actions, const struct termios *termios_p)
|
|||
*/
|
||||
static_assert_equal(TCSADRAIN, TCSANOW + 1);
|
||||
static_assert_equal(TCSAFLUSH, TCSANOW + 2);
|
||||
static_assert_equal(KERNEL_TCSETSW2, KERNEL_TCSETS2 + 1);
|
||||
static_assert_equal(KERNEL_TCSETSF2, KERNEL_TCSETS2 + 2);
|
||||
static_assert_equal(KERNEL_TCSETSW, KERNEL_TCSETS + 1);
|
||||
static_assert_equal(KERNEL_TCSETSF, KERNEL_TCSETS + 2);
|
||||
static_assert_equal(TCSETSW2, TCSETS2 + 1);
|
||||
static_assert_equal(TCSETSF2, TCSETS2 + 2);
|
||||
static_assert_equal(TCSETSW, TCSETS + 1);
|
||||
static_assert_equal(TCSETSF, TCSETS + 2);
|
||||
|
||||
cmd = (long)optional_actions - TCSANOW;
|
||||
if (cmd > 2)
|
||||
|
|
@ -72,11 +66,11 @@ __tcsetattr (int fd, int optional_actions, const struct termios *termios_p)
|
|||
k_termios.c_ospeed != k_termios.c_ispeed ||
|
||||
cbaud (k_termios.c_cflag) == __BOTHER)
|
||||
{
|
||||
cmd += KERNEL_TCSETS2;
|
||||
cmd += TCSETS2;
|
||||
}
|
||||
else
|
||||
{
|
||||
cmd += KERNEL_TCSETS;
|
||||
cmd += TCSETS;
|
||||
k_termios.c_cflag &= ~CIBAUD;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,26 +0,0 @@
|
|||
#include <linux/termios.h>
|
||||
#include <stddef.h>
|
||||
|
||||
#ifdef TCGETS2
|
||||
# define STRUCT_TERMIOS struct termios2
|
||||
#else
|
||||
# define TCGETS2 TCGETS
|
||||
# define TCSETS2 TCSETS
|
||||
# define TCSETSW2 TCSETSW
|
||||
# define TCSETSF2 TCSETSF
|
||||
# define STRUCT_TERMIOS struct termios
|
||||
#endif
|
||||
|
||||
--
|
||||
KERNEL_TCGETS TCGETS
|
||||
KERNEL_TCSETS TCSETS
|
||||
KERNEL_TCSETSF TCSETSF
|
||||
KERNEL_TCSETSW TCSETSW
|
||||
KERNEL_TCGETS2 TCGETS2
|
||||
KERNEL_TCSETS2 TCSETS2
|
||||
KERNEL_TCSETSF2 TCSETSF2
|
||||
KERNEL_TCSETSW2 TCSETSW2
|
||||
KERNEL_TERMIOS2_SIZE sizeof (STRUCT_TERMIOS)
|
||||
KERNEL_TERMIOS2_CC_OFFSET offsetof (STRUCT_TERMIOS, c_cc)
|
||||
KERNEL_TERMIOS2_LINE_OFFSET offsetof (STRUCT_TERMIOS, c_line)
|
||||
_TERMIOS2_NCCS sizeof ((STRUCT_TERMIOS) { 0 }.c_cc) / sizeof (cc_t)
|
||||
|
|
@ -0,0 +1,23 @@
|
|||
/* Architectural parameters for Linux termios - generic version
|
||||
|
||||
Copyright (C) 1997-2025 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library; if not, see
|
||||
<https://www.gnu.org/licenses/>. */
|
||||
|
||||
#define _TERMIOS2_NCCS 19
|
||||
#define _HAVE_TERMIOS2_C_CC_BEFORE_C_LINE 0
|
||||
|
||||
#define _HAVE_STRUCT_OLD_TERMIOS 0
|
||||
|
|
@ -30,18 +30,7 @@
|
|||
#include <sysdep.h>
|
||||
#include <shlib-compat.h>
|
||||
|
||||
#include <termios-kernel-consts.h>
|
||||
|
||||
/* Alpha got termios2 late, but TCGETS has exactly the same structure
|
||||
format and function as TCGETS2. On all other platforms, the termios2
|
||||
interface exists as far back as this version of glibc supports.
|
||||
|
||||
For TCSETS* it is more complicated; this is handled in tcsetattr.c. */
|
||||
#ifdef __ASSUME_TERMIOS2
|
||||
# define ARCH_TCGETS KERNEL_TCGETS2
|
||||
#else
|
||||
# define ARCH_TCGETS KERNEL_TCGETS
|
||||
#endif
|
||||
#include <termios_arch.h>
|
||||
|
||||
/* ---- Kernel interface definitions ---- */
|
||||
|
||||
|
|
@ -55,7 +44,7 @@ struct termios2
|
|||
tcflag_t c_oflag; /* output mode flags */
|
||||
tcflag_t c_cflag; /* control mode flags */
|
||||
tcflag_t c_lflag; /* local mode flags */
|
||||
#if KERNEL_TERMIOS2_CC_OFFSET < KERNEL_TERMIOS2_LINE_OFFSET
|
||||
#if _HAVE_TERMIOS2_C_CC_BEFORE_C_LINE
|
||||
cc_t c_cc[_TERMIOS2_NCCS]; /* control characters */
|
||||
cc_t c_line; /* line discipline */
|
||||
#else
|
||||
|
|
@ -66,6 +55,26 @@ struct termios2
|
|||
speed_t c_ospeed; /* output speed */
|
||||
};
|
||||
|
||||
/* Alpha got termios2 late, but TCGETS has exactly the same structure
|
||||
format and function as TCGETS2. On all other platforms, the termios2
|
||||
interface exists as far back as this version of glibc supports.
|
||||
|
||||
For TCSETS* it is more complicated; this is handled in tcsetattr.c.
|
||||
|
||||
Some other architectures only have the equivalent of the termios2
|
||||
interface, in which case the old ioctl names are the only ones
|
||||
presented, but are equivalent to the new ones. */
|
||||
#ifndef TCGETS2
|
||||
# define TCGETS2 TCGETS
|
||||
# define TCSETS2 TCSETS
|
||||
# define TCSETSW2 TCSETSW
|
||||
# define TCSETSF2 TCSETSF
|
||||
#elif !__ASSUME_TERMIOS2
|
||||
/* Hack for Alpha */
|
||||
# undef TCGETS2
|
||||
# define TCGETS2 TCGETS
|
||||
#endif
|
||||
|
||||
/* ---- Application interface definitions ---- */
|
||||
|
||||
/*
|
||||
|
|
@ -82,7 +91,12 @@ struct termios2
|
|||
* This only applies to SPARC and MIPS; for other architectures the
|
||||
* new and old speed_t interfaces both use the same struct termios.
|
||||
*/
|
||||
#include <old_termios.h>
|
||||
#if _HAVE_STRUCT_OLD_TERMIOS
|
||||
typedef struct old_termios old_termios_t;
|
||||
#else
|
||||
# define OLD_NCCS NCCS
|
||||
typedef struct termios old_termios_t;
|
||||
#endif
|
||||
|
||||
/* ---- Internal function definitions ---- */
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue