From: H. Peter Anvin Date: Mon, 20 Oct 2025 20:42:10 +0000 (-0700) Subject: linux/termios: factor out the kernel interface from termios_internal.h X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6463953fec2a8c9acda19ecd49358aa1f80eb02f;p=thirdparty%2Fglibc.git linux/termios: factor out the kernel interface from termios_internal.h Factor out the internal kernel interface from termios_internal.h, so that it can be used in test code without causing breakage due to glibc internals used in headers. [ v3: fix Alpha build breakage ] Signed-off-by: H. Peter Anvin (Intel) Reviewed-by: Adhemerval Zanella --- diff --git a/sysdeps/unix/sysv/linux/alpha/termios_arch.h b/sysdeps/unix/sysv/linux/alpha/termios_arch.h index 20025f2549..e671accac6 100644 --- a/sysdeps/unix/sysv/linux/alpha/termios_arch.h +++ b/sysdeps/unix/sysv/linux/alpha/termios_arch.h @@ -17,8 +17,8 @@ License along with the GNU C Library; if not, see . */ -#ifndef TERMIOS_INTERNALS_H -# error " should only be included from " +#ifndef K_TERMIOS_H +# error " should only be included from " #endif #define _TERMIOS2_NCCS 19 diff --git a/sysdeps/unix/sysv/linux/k_termios.h b/sysdeps/unix/sysv/linux/k_termios.h new file mode 100644 index 0000000000..99abe7669b --- /dev/null +++ b/sysdeps/unix/sysv/linux/k_termios.h @@ -0,0 +1,70 @@ +/* termios kernel interface for Linux + + 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 + 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 + . */ + +#ifndef K_TERMIOS_H +#define K_TERMIOS_H + +#include +#include +#include +#include +#include + +/* The the termios2 structure used in the kernel interfaces is not the + same as the termios structure we use in the libc. Therefore we + must translate it here. */ + +struct termios2 +{ + 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 */ +#if _HAVE_TERMIOS2_C_CC_BEFORE_C_LINE + cc_t c_cc[_TERMIOS2_NCCS]; /* control characters */ + cc_t c_line; /* line discipline */ +#else + cc_t c_line; /* line discipline */ + cc_t c_cc[_TERMIOS2_NCCS]; /* control characters */ +#endif + speed_t c_ispeed; /* input speed */ + 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 + +#endif /* KTERMIOS_H */ diff --git a/sysdeps/unix/sysv/linux/termios_internals.h b/sysdeps/unix/sysv/linux/termios_internals.h index e8dbfe74de..db12802a35 100644 --- a/sysdeps/unix/sysv/linux/termios_internals.h +++ b/sysdeps/unix/sysv/linux/termios_internals.h @@ -30,50 +30,7 @@ #include #include -#include - -/* ---- Kernel interface definitions ---- */ - -/* The the termios2 structure used in the kernel interfaces is not the - same as the termios structure we use in the libc. Therefore we - must translate it here. */ - -struct termios2 -{ - 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 */ -#if _HAVE_TERMIOS2_C_CC_BEFORE_C_LINE - cc_t c_cc[_TERMIOS2_NCCS]; /* control characters */ - cc_t c_line; /* line discipline */ -#else - cc_t c_line; /* line discipline */ - cc_t c_cc[_TERMIOS2_NCCS]; /* control characters */ -#endif - speed_t c_ispeed; /* input speed */ - 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 +#include /* ---- Application interface definitions ---- */