]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
termios: add new baud_t interface, defined to be explicitly numeric
authorH. Peter Anvin (Intel) <hpa@zytor.com>
Thu, 12 Jun 2025 01:35:42 +0000 (18:35 -0700)
committerAdhemerval Zanella <adhemerval.zanella@linaro.org>
Tue, 17 Jun 2025 12:11:38 +0000 (09:11 -0300)
Add an explicitly numeric interface for baudrate setting. For glibc,
this only announces what is a fair accompli, but this is a plausible
way forward for standardization, and may be possible to infill on
non-compliant systems. The POSIX committee has stated:

[https://www.austingroupbugs.net/view.php?id=1916#c7135]

A future version of this standard is expected to add at least
the following symbolic constants for use as values of objects
of type speed_t: B57600, B115200B230400B460800, and
B921600.

Implementations are encouraged to propose additional
interfaces which will make it possible to set and query a
wider range of speeds than just those enumerated by the
constants beginning with B. If a set of common interfaces
emerges between several implementations, a future version of
this standard will likely add those interfaces.

This is exactly that interface.

The use of the term "baud" is due to the need to have a term
contrasting "speed", and it is already well established as a legacy
term -- including in the names of the legacy Bxxx
constants. Futhermore, it *is* valid from the point of view that the
termios interface fundamentally emulates an RS-232 serial port as far
as the application software is concerned.

The documentation states that for the current version of glibc,
speed_t == baud_t, but explicitly declares that this may not be the
case in the future.

Signed-off-by: H. Peter Anvin (Intel) <hpa@zytor.com>
Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
45 files changed:
include/termios.h
manual/terminal.texi
sysdeps/mach/hurd/i386/libc.abilist
sysdeps/mach/hurd/x86_64/libc.abilist
sysdeps/unix/sysv/linux/aarch64/libc.abilist
sysdeps/unix/sysv/linux/alpha/libc.abilist
sysdeps/unix/sysv/linux/arc/libc.abilist
sysdeps/unix/sysv/linux/arm/be/libc.abilist
sysdeps/unix/sysv/linux/arm/le/libc.abilist
sysdeps/unix/sysv/linux/cfsetspeed.c
sysdeps/unix/sysv/linux/csky/libc.abilist
sysdeps/unix/sysv/linux/hppa/libc.abilist
sysdeps/unix/sysv/linux/i386/libc.abilist
sysdeps/unix/sysv/linux/loongarch/lp64/libc.abilist
sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
sysdeps/unix/sysv/linux/or1k/libc.abilist
sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
sysdeps/unix/sysv/linux/sh/be/libc.abilist
sysdeps/unix/sysv/linux/sh/le/libc.abilist
sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
sysdeps/unix/sysv/linux/speed.c
sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
termios/Makefile
termios/Versions
termios/baud.c [new file with mode: 0644]
termios/cfsetbaud.c [new file with mode: 0644]
termios/cfsetspeed.c
termios/speed.c
termios/termios.h

index a79da7a1f379e97c3271ac67c5aac92b7186a486..d46608278fec5d26191ff31e329d14063eee536b 100644 (file)
@@ -2,7 +2,18 @@
 #include <termios/termios.h>
 
 #ifndef _ISOMAC
-/* Now define the internal interfaces.  */
+extern speed_t __cfgetospeed (const struct termios *__termios_p);
+extern speed_t __cfgetispeed (const struct termios *__termios_p);
+extern int __cfsetospeed (struct termios *__termios_p, speed_t __speed);
+extern int __cfsetispeed (struct termios *__termios_p, speed_t __speed);
+extern int __cfsetspeed (struct termios *__termios_p, speed_t __speed);
+
+extern baud_t __cfgetobaud (const struct termios *__termios_p);
+extern baud_t __cfgetibaud (const struct termios *__termios_p);
+extern int __cfsetobaud (struct termios *__termios_p, baud_t __baud);
+extern int __cfsetibaud (struct termios *__termios_p, baud_t __baud);
+extern int __cfsetbaud (struct termios *__termios_p, baud_t __baud);
+
 extern int __tcgetattr (int __fd, struct termios *__termios_p);
 extern int __tcsetattr (int __fd, int __optional_actions,
                        const struct termios *__termios_p);
@@ -11,8 +22,16 @@ extern int __libc_tcdrain (int __fd);
 
 libc_hidden_proto (__tcgetattr)
 libc_hidden_proto (__tcsetattr)
-libc_hidden_proto (cfsetispeed)
-libc_hidden_proto (cfsetospeed)
+libc_hidden_proto (__cfgetispeed)
+libc_hidden_proto (__cfgetospeed)
+libc_hidden_proto (__cfsetispeed)
+libc_hidden_proto (__cfsetospeed)
+libc_hidden_proto (__cfsetspeed)
+libc_hidden_proto (__cfgetibaud)
+libc_hidden_proto (__cfgetobaud)
+libc_hidden_proto (__cfsetibaud)
+libc_hidden_proto (__cfsetobaud)
+libc_hidden_proto (__cfsetbaud)
 
 #endif
 #endif
index 72d0282efdbc6c8f335a830261cd66053f086ac0..de9554d837577e76aeeb07c91ee05ae6810bc088 100644 (file)
@@ -771,11 +771,11 @@ If this bit is set, it says to ignore the control modes and line speed
 values entirely.  This is only meaningful in a call to @code{tcsetattr}.
 
 The @code{c_cflag} member and the line speed values returned by
-@code{cfgetispeed} and @code{cfgetospeed} will be unaffected by the
-call.  @code{CIGNORE} is useful if you want to set all the software
-modes in the other members, but leave the hardware details in
-@code{c_cflag} unchanged.  (This is how the @code{TCSASOFT} flag to
-@code{tcsettattr} works.)
+@code{cfgetispeed}, @code{cfgetospeed}, @code{cfgetibaud} and
+@code{cfsetibaud} will be unaffected by the call.  @code{CIGNORE} is
+useful if you want to set all the software modes in the other members,
+but leave the hardware details in @code{c_cflag} unchanged.  (This is
+how the @code{TCSASOFT} flag to @code{tcsettattr} works.)
 
 This bit is never set in the structure filled in by @code{tcgetattr}.
 @end deftypevr
@@ -1047,14 +1047,15 @@ The @code{speed_t} type is an unsigned integer data type used to
 represent line speeds.
 @end deftp
 
-The functions @code{cfsetospeed} and @code{cfsetispeed} report errors
-only for speed values that the system simply cannot handle.  If you
-specify a speed value that is basically acceptable, then those functions
-will succeed.  But they do not check that a particular hardware device
-can actually support the specified speeds---in fact, they don't know
-which device you plan to set the speed for.  If you use @code{tcsetattr}
-to set the speed of a particular device to a value that it cannot
-handle, @code{tcsetattr} returns @math{-1}.
+@deftypefun speed_t cfgetospeed (const struct termios *@var{termios-p})
+@standards{POSIX.1, termios.h}
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c Direct access to a single termios field, except on Linux, where
+@c multiple accesses may take place.  No worries either way, callers
+@c must ensure mutual exclusion on such non-opaque types.
+This function returns the output line speed stored in the structure
+@code{*@var{termios-p}}.
+@end deftypefun
 
 @strong{Portability note:} In @theglibc{}, the functions above
 accept speeds measured in bits per second as input, and return speed
@@ -1205,6 +1206,69 @@ BSD defines two additional speed symbols as aliases: @code{EXTA} is an
 alias for @code{B19200} and @code{EXTB} is an alias for @code{B38400}.
 These aliases are obsolete.
 
+@deftypefun baud_t cfgetibaud (const struct termios *@var{termios-p})
+@standards{GNU, termios.h}
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+This function returns the input line baud rate stored in the structure
+@code{*@var{termios-p}}.
+@end deftypefun
+
+@deftypefun int cfsetobaud (struct termios *@var{termios-p}, baud_t @var{baud})
+@standards{GNU, termios.h}
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+This function stores @var{baud} in @code{*@var{termios-p}} as the output
+baud rate.  The normal return value is @math{0}; a value of @math{-1}
+indicates an error.  If @var{baud} is not a valid baud rate, @code{cfsetobaud}
+returns @math{-1}.
+@end deftypefun
+
+@deftypefun int cfsetibaud (struct termios *@var{termios-p}, baud_t @var{baud})
+@standards{GNU, termios.h}
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+This function stores @var{baud} in @code{*@var{termios-p}} as the input
+baud rate.  The normal return value is @math{0}; a value of @math{-1}
+indicates an error.  If @var{baud} is not a valid baud rate, @code{cfsetobaud}
+returns @math{-1}.
+@end deftypefun
+
+@deftypefun int cfsetbaud (struct termios *@var{termios-p}, baud_t @var{baud})
+@standards{GNU, termios.h}
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c There's no guarantee that the two calls are atomic, but since this is
+@c not an opaque type, callers ought to ensure mutual exclusion to the
+@c termios object.
+
+@c cfsetbaud ok
+@c  cfsetibaud ok
+@c  cfsetobaud ok
+This function stores @var{baud} in @code{*@var{termios-p}} as both the
+input and output baud rates.  The normal return value is @math{0}; a value
+of @math{-1} indicates an error.  If @var{baud} is not a valid baud rate,
+@code{cfsetbaud} returns @math{-1}.
+@end deftypefun
+
+@deftp {Data Type} baud_t
+@standards{GNU}
+The @code{baud_t} type is a numeric data type used to represent line
+baud rates. It will always represent the actual numeric value
+representing the baud rate, unlike @code{speed_t}. In the current
+version of @theglibc{} this is the same type as @code{speed_t}, but this
+may not be the case in future versions, or on other implementations; it
+may not even necessarily be an integer type.
+
+@end deftp
+
+The functions @code{cfsetospeed}, @code{cfsetispeed}, @code{cfsetobaud}
+and @code{cfsetibaud} report errors only for speed values that the
+system simply cannot handle.  If you specify a speed value that is
+basically acceptable, then those functions will succeed.  But they do
+not check that a particular hardware device can actually support the
+specified speeds---in fact, they don't know which device you plan to set
+the speed for.  If you use @code{tcsetattr} to set the speed of a
+particular device to a value that it cannot handle, either @code{tcsetattr}
+returns @math{-1}, or the value is adjusted to the closest supported
+value, depending on the policy of the kernel driver.
+
 @node Special Characters
 @subsection Special Characters
 
index 89a41a30c6a60a60b4202c0b1791fd32da193cc2..a0e686afc7a4709c179a9ebf053c3958d936e05f 100644 (file)
@@ -2591,6 +2591,11 @@ GLIBC_2.41 pthread_mutexattr_settype F
 GLIBC_2.41 pthread_sigmask F
 GLIBC_2.42 __inet_ntop_chk F
 GLIBC_2.42 __inet_pton_chk F
+GLIBC_2.42 cfgetibaud F
+GLIBC_2.42 cfgetobaud F
+GLIBC_2.42 cfsetbaud F
+GLIBC_2.42 cfsetibaud F
+GLIBC_2.42 cfsetobaud F
 GLIBC_2.42 pthread_barrier_destroy F
 GLIBC_2.42 pthread_barrier_init F
 GLIBC_2.42 pthread_barrier_wait F
index 3e9ce8ba9c2cce1e0f684ea9973ad631812def4b..8f9d6aa842b0e5665c2f1f4f1cd0e385750becc1 100644 (file)
@@ -2274,6 +2274,11 @@ GLIBC_2.41 pthread_mutexattr_settype F
 GLIBC_2.41 pthread_sigmask F
 GLIBC_2.42 __inet_ntop_chk F
 GLIBC_2.42 __inet_pton_chk F
+GLIBC_2.42 cfgetibaud F
+GLIBC_2.42 cfgetobaud F
+GLIBC_2.42 cfsetbaud F
+GLIBC_2.42 cfsetibaud F
+GLIBC_2.42 cfsetobaud F
 GLIBC_2.42 pthread_barrier_destroy F
 GLIBC_2.42 pthread_barrier_init F
 GLIBC_2.42 pthread_barrier_wait F
index fdccf84d8f8833063fda7acf42019818f1d7a3c6..a22e65143209b74ea8e9b77e7a8bac8966fa7cd2 100644 (file)
@@ -2752,9 +2752,14 @@ GLIBC_2.41 sched_getattr F
 GLIBC_2.41 sched_setattr F
 GLIBC_2.42 __inet_ntop_chk F
 GLIBC_2.42 __inet_pton_chk F
+GLIBC_2.42 cfgetibaud F
 GLIBC_2.42 cfgetispeed F
+GLIBC_2.42 cfgetobaud F
 GLIBC_2.42 cfgetospeed F
+GLIBC_2.42 cfsetbaud F
+GLIBC_2.42 cfsetibaud F
 GLIBC_2.42 cfsetispeed F
+GLIBC_2.42 cfsetobaud F
 GLIBC_2.42 cfsetospeed F
 GLIBC_2.42 cfsetspeed F
 GLIBC_2.42 pthread_gettid_np F
index 1e3f2781553ee0b5b2576a738bf480d21d0a2493..4b5736a3b6d3e54438767d24ff48a3dbf172727b 100644 (file)
@@ -3099,9 +3099,14 @@ GLIBC_2.41 sched_getattr F
 GLIBC_2.41 sched_setattr F
 GLIBC_2.42 __inet_ntop_chk F
 GLIBC_2.42 __inet_pton_chk F
+GLIBC_2.42 cfgetibaud F
 GLIBC_2.42 cfgetispeed F
+GLIBC_2.42 cfgetobaud F
 GLIBC_2.42 cfgetospeed F
+GLIBC_2.42 cfsetbaud F
+GLIBC_2.42 cfsetibaud F
 GLIBC_2.42 cfsetispeed F
+GLIBC_2.42 cfsetobaud F
 GLIBC_2.42 cfsetospeed F
 GLIBC_2.42 cfsetspeed F
 GLIBC_2.42 pthread_gettid_np F
index 7b7717d1d146f7669eb583375a372094c42ac97a..b8a44784bdc97d1d63701479b618323bce96aae9 100644 (file)
@@ -2513,9 +2513,14 @@ GLIBC_2.41 sched_getattr F
 GLIBC_2.41 sched_setattr F
 GLIBC_2.42 __inet_ntop_chk F
 GLIBC_2.42 __inet_pton_chk F
+GLIBC_2.42 cfgetibaud F
 GLIBC_2.42 cfgetispeed F
+GLIBC_2.42 cfgetobaud F
 GLIBC_2.42 cfgetospeed F
+GLIBC_2.42 cfsetbaud F
+GLIBC_2.42 cfsetibaud F
 GLIBC_2.42 cfsetispeed F
+GLIBC_2.42 cfsetobaud F
 GLIBC_2.42 cfsetospeed F
 GLIBC_2.42 cfsetspeed F
 GLIBC_2.42 pthread_gettid_np F
index f64bf3f3278e65fc55248a0ba76b583dca4f9e0e..959e44672f2a7c12508852982bdf8be4c7ab9030 100644 (file)
@@ -2805,9 +2805,14 @@ GLIBC_2.41 sched_getattr F
 GLIBC_2.41 sched_setattr F
 GLIBC_2.42 __inet_ntop_chk F
 GLIBC_2.42 __inet_pton_chk F
+GLIBC_2.42 cfgetibaud F
 GLIBC_2.42 cfgetispeed F
+GLIBC_2.42 cfgetobaud F
 GLIBC_2.42 cfgetospeed F
+GLIBC_2.42 cfsetbaud F
+GLIBC_2.42 cfsetibaud F
 GLIBC_2.42 cfsetispeed F
+GLIBC_2.42 cfsetobaud F
 GLIBC_2.42 cfsetospeed F
 GLIBC_2.42 cfsetspeed F
 GLIBC_2.42 pthread_gettid_np F
index c065fe80fcd081055c7b279de89132827a51c515..a930d1a52bbfb8f97d4ac4badd7a6f7f56f0953a 100644 (file)
@@ -2802,9 +2802,14 @@ GLIBC_2.41 sched_getattr F
 GLIBC_2.41 sched_setattr F
 GLIBC_2.42 __inet_ntop_chk F
 GLIBC_2.42 __inet_pton_chk F
+GLIBC_2.42 cfgetibaud F
 GLIBC_2.42 cfgetispeed F
+GLIBC_2.42 cfgetobaud F
 GLIBC_2.42 cfgetospeed F
+GLIBC_2.42 cfsetbaud F
+GLIBC_2.42 cfsetibaud F
 GLIBC_2.42 cfsetispeed F
+GLIBC_2.42 cfsetobaud F
 GLIBC_2.42 cfsetospeed F
 GLIBC_2.42 cfsetspeed F
 GLIBC_2.42 pthread_gettid_np F
index 8fd95875d99cc984416c6eff84f0604522443d26..8ce46f8d4fa4d250b1e7d310f3dece9d5fb1848e 100644 (file)
@@ -31,6 +31,7 @@ __cfsetspeed (struct termios *termios_p, speed_t speed)
 
   return 0;
 }
+libc_hidden_def (__cfsetspeed)
 versioned_symbol (libc, __cfsetspeed, cfsetspeed, GLIBC_2_42);
 
 #if _TERMIOS_OLD_COMPAT
index 69ba60ea093e73099bd7aef6b176bef6885bf77c..6325fc12c4b441d0bc407628e435993191def64c 100644 (file)
@@ -2789,9 +2789,14 @@ GLIBC_2.41 sched_getattr F
 GLIBC_2.41 sched_setattr F
 GLIBC_2.42 __inet_ntop_chk F
 GLIBC_2.42 __inet_pton_chk F
+GLIBC_2.42 cfgetibaud F
 GLIBC_2.42 cfgetispeed F
+GLIBC_2.42 cfgetobaud F
 GLIBC_2.42 cfgetospeed F
+GLIBC_2.42 cfsetbaud F
+GLIBC_2.42 cfsetibaud F
 GLIBC_2.42 cfsetispeed F
+GLIBC_2.42 cfsetobaud F
 GLIBC_2.42 cfsetospeed F
 GLIBC_2.42 cfsetspeed F
 GLIBC_2.42 pthread_gettid_np F
index dea7c09692bd55cd200934798df2fe9155f1d337..86b3fbdeec149d33f29a8e33558571779562e372 100644 (file)
@@ -2826,9 +2826,14 @@ GLIBC_2.41 sched_getattr F
 GLIBC_2.41 sched_setattr F
 GLIBC_2.42 __inet_ntop_chk F
 GLIBC_2.42 __inet_pton_chk F
+GLIBC_2.42 cfgetibaud F
 GLIBC_2.42 cfgetispeed F
+GLIBC_2.42 cfgetobaud F
 GLIBC_2.42 cfgetospeed F
+GLIBC_2.42 cfsetbaud F
+GLIBC_2.42 cfsetibaud F
 GLIBC_2.42 cfsetispeed F
+GLIBC_2.42 cfsetobaud F
 GLIBC_2.42 cfsetospeed F
 GLIBC_2.42 cfsetspeed F
 GLIBC_2.42 pthread_gettid_np F
index 4c05ab1c6e0700eb5c7b6cc210ef869304217bd8..6555592d86d94fb4e4657d24221bf0d4b67dc3b3 100644 (file)
@@ -3009,9 +3009,14 @@ GLIBC_2.41 sched_getattr F
 GLIBC_2.41 sched_setattr F
 GLIBC_2.42 __inet_ntop_chk F
 GLIBC_2.42 __inet_pton_chk F
+GLIBC_2.42 cfgetibaud F
 GLIBC_2.42 cfgetispeed F
+GLIBC_2.42 cfgetobaud F
 GLIBC_2.42 cfgetospeed F
+GLIBC_2.42 cfsetbaud F
+GLIBC_2.42 cfsetibaud F
 GLIBC_2.42 cfsetispeed F
+GLIBC_2.42 cfsetobaud F
 GLIBC_2.42 cfsetospeed F
 GLIBC_2.42 cfsetspeed F
 GLIBC_2.42 pthread_gettid_np F
index 6ab4968d17ce5038f16ba155919a22bfd05c30e4..a6cab9612a4cef459c121a5101bf1da01f8b5f55 100644 (file)
@@ -2273,9 +2273,14 @@ GLIBC_2.41 sched_getattr F
 GLIBC_2.41 sched_setattr F
 GLIBC_2.42 __inet_ntop_chk F
 GLIBC_2.42 __inet_pton_chk F
+GLIBC_2.42 cfgetibaud F
 GLIBC_2.42 cfgetispeed F
+GLIBC_2.42 cfgetobaud F
 GLIBC_2.42 cfgetospeed F
+GLIBC_2.42 cfsetbaud F
+GLIBC_2.42 cfsetibaud F
 GLIBC_2.42 cfsetispeed F
+GLIBC_2.42 cfsetobaud F
 GLIBC_2.42 cfsetospeed F
 GLIBC_2.42 cfsetspeed F
 GLIBC_2.42 pthread_gettid_np F
index e553bdc8a3b04598f8c41786d556e53bc410ee76..7b7b72aa50f8578ba150b160b2e098cca7c60244 100644 (file)
@@ -2785,9 +2785,14 @@ GLIBC_2.41 sched_getattr F
 GLIBC_2.41 sched_setattr F
 GLIBC_2.42 __inet_ntop_chk F
 GLIBC_2.42 __inet_pton_chk F
+GLIBC_2.42 cfgetibaud F
 GLIBC_2.42 cfgetispeed F
+GLIBC_2.42 cfgetobaud F
 GLIBC_2.42 cfgetospeed F
+GLIBC_2.42 cfsetbaud F
+GLIBC_2.42 cfsetibaud F
 GLIBC_2.42 cfsetispeed F
+GLIBC_2.42 cfsetobaud F
 GLIBC_2.42 cfsetospeed F
 GLIBC_2.42 cfsetspeed F
 GLIBC_2.42 pthread_gettid_np F
index 1239f0d7a02919f45723ec8e0844f50f32d61a1e..df398e43c62d65631a2c794a4f23a3982d529bfa 100644 (file)
@@ -2952,9 +2952,14 @@ GLIBC_2.41 sched_getattr F
 GLIBC_2.41 sched_setattr F
 GLIBC_2.42 __inet_ntop_chk F
 GLIBC_2.42 __inet_pton_chk F
+GLIBC_2.42 cfgetibaud F
 GLIBC_2.42 cfgetispeed F
+GLIBC_2.42 cfgetobaud F
 GLIBC_2.42 cfgetospeed F
+GLIBC_2.42 cfsetbaud F
+GLIBC_2.42 cfsetibaud F
 GLIBC_2.42 cfsetispeed F
+GLIBC_2.42 cfsetobaud F
 GLIBC_2.42 cfsetospeed F
 GLIBC_2.42 cfsetspeed F
 GLIBC_2.42 pthread_gettid_np F
index 943e89a45fd494680f64d91593ebcfa07197186f..ca8df6f4b0c1fb56d306d0bd2c4e1f53e7d507ae 100644 (file)
@@ -2838,9 +2838,14 @@ GLIBC_2.41 sched_getattr F
 GLIBC_2.41 sched_setattr F
 GLIBC_2.42 __inet_ntop_chk F
 GLIBC_2.42 __inet_pton_chk F
+GLIBC_2.42 cfgetibaud F
 GLIBC_2.42 cfgetispeed F
+GLIBC_2.42 cfgetobaud F
 GLIBC_2.42 cfgetospeed F
+GLIBC_2.42 cfsetbaud F
+GLIBC_2.42 cfsetibaud F
 GLIBC_2.42 cfsetispeed F
+GLIBC_2.42 cfsetobaud F
 GLIBC_2.42 cfsetospeed F
 GLIBC_2.42 cfsetspeed F
 GLIBC_2.42 pthread_gettid_np F
index 9c303d9d9aa8dddee877ab80c67af3d41ec1dcd1..950815484752bc1461fbbc234befb7fd4f4a4a46 100644 (file)
@@ -2835,9 +2835,14 @@ GLIBC_2.41 sched_getattr F
 GLIBC_2.41 sched_setattr F
 GLIBC_2.42 __inet_ntop_chk F
 GLIBC_2.42 __inet_pton_chk F
+GLIBC_2.42 cfgetibaud F
 GLIBC_2.42 cfgetispeed F
+GLIBC_2.42 cfgetobaud F
 GLIBC_2.42 cfgetospeed F
+GLIBC_2.42 cfsetbaud F
+GLIBC_2.42 cfsetibaud F
 GLIBC_2.42 cfsetispeed F
+GLIBC_2.42 cfsetobaud F
 GLIBC_2.42 cfsetospeed F
 GLIBC_2.42 cfsetspeed F
 GLIBC_2.42 pthread_gettid_np F
index 6eb6fd476b0d54a1d455f9361e3c8629c6bffa8a..4d51cc428f15ec435b32ff14862b946e7339eb22 100644 (file)
@@ -2913,9 +2913,14 @@ GLIBC_2.41 sched_getattr F
 GLIBC_2.41 sched_setattr F
 GLIBC_2.42 __inet_ntop_chk F
 GLIBC_2.42 __inet_pton_chk F
+GLIBC_2.42 cfgetibaud F
 GLIBC_2.42 cfgetispeed F
+GLIBC_2.42 cfgetobaud F
 GLIBC_2.42 cfgetospeed F
+GLIBC_2.42 cfsetbaud F
+GLIBC_2.42 cfsetibaud F
 GLIBC_2.42 cfsetispeed F
+GLIBC_2.42 cfsetobaud F
 GLIBC_2.42 cfsetospeed F
 GLIBC_2.42 cfsetspeed F
 GLIBC_2.42 pthread_gettid_np F
index 58a43bb9b3d36b8dc0d1bc2ea4375aad073fb3bc..7f90fadc76ec25cf73743e46d292f63f548f823a 100644 (file)
@@ -2911,9 +2911,14 @@ GLIBC_2.41 sched_getattr F
 GLIBC_2.41 sched_setattr F
 GLIBC_2.42 __inet_ntop_chk F
 GLIBC_2.42 __inet_pton_chk F
+GLIBC_2.42 cfgetibaud F
 GLIBC_2.42 cfgetispeed F
+GLIBC_2.42 cfgetobaud F
 GLIBC_2.42 cfgetospeed F
+GLIBC_2.42 cfsetbaud F
+GLIBC_2.42 cfsetibaud F
 GLIBC_2.42 cfsetispeed F
+GLIBC_2.42 cfsetobaud F
 GLIBC_2.42 cfsetospeed F
 GLIBC_2.42 cfsetspeed F
 GLIBC_2.42 pthread_gettid_np F
index abab2ad807584624791015c1a8d9fa9e549b6577..fc366d1bd0de4745ed94d676c595b7402f806e00 100644 (file)
@@ -2919,9 +2919,14 @@ GLIBC_2.41 sched_getattr F
 GLIBC_2.41 sched_setattr F
 GLIBC_2.42 __inet_ntop_chk F
 GLIBC_2.42 __inet_pton_chk F
+GLIBC_2.42 cfgetibaud F
 GLIBC_2.42 cfgetispeed F
+GLIBC_2.42 cfgetobaud F
 GLIBC_2.42 cfgetospeed F
+GLIBC_2.42 cfsetbaud F
+GLIBC_2.42 cfsetibaud F
 GLIBC_2.42 cfsetispeed F
+GLIBC_2.42 cfsetobaud F
 GLIBC_2.42 cfsetospeed F
 GLIBC_2.42 cfsetspeed F
 GLIBC_2.42 pthread_gettid_np F
index 2e31f6eed6b7d15f583d99892ceb524fe49be417..debd5c37c9af534d7e7947d4b72c9ab24c71f611 100644 (file)
@@ -2821,9 +2821,14 @@ GLIBC_2.41 sched_getattr F
 GLIBC_2.41 sched_setattr F
 GLIBC_2.42 __inet_ntop_chk F
 GLIBC_2.42 __inet_pton_chk F
+GLIBC_2.42 cfgetibaud F
 GLIBC_2.42 cfgetispeed F
+GLIBC_2.42 cfgetobaud F
 GLIBC_2.42 cfgetospeed F
+GLIBC_2.42 cfsetbaud F
+GLIBC_2.42 cfsetibaud F
 GLIBC_2.42 cfsetispeed F
+GLIBC_2.42 cfsetobaud F
 GLIBC_2.42 cfsetospeed F
 GLIBC_2.42 cfsetspeed F
 GLIBC_2.42 pthread_gettid_np F
index b54c078b520cecbebdce9b883087f2136014fd4e..b62d59f1afe9c7030e1ecff7f00afd8c3c89996c 100644 (file)
@@ -2263,9 +2263,14 @@ GLIBC_2.41 sched_getattr F
 GLIBC_2.41 sched_setattr F
 GLIBC_2.42 __inet_ntop_chk F
 GLIBC_2.42 __inet_pton_chk F
+GLIBC_2.42 cfgetibaud F
 GLIBC_2.42 cfgetispeed F
+GLIBC_2.42 cfgetobaud F
 GLIBC_2.42 cfgetospeed F
+GLIBC_2.42 cfsetbaud F
+GLIBC_2.42 cfsetibaud F
 GLIBC_2.42 cfsetispeed F
+GLIBC_2.42 cfsetobaud F
 GLIBC_2.42 cfsetospeed F
 GLIBC_2.42 cfsetspeed F
 GLIBC_2.42 pthread_gettid_np F
index c30e17cdfca2a320f0d4f48c953304656a1a6241..883e66f3ae6af9fa298bdf37763028c658bf163b 100644 (file)
@@ -3142,9 +3142,14 @@ GLIBC_2.41 sched_getattr F
 GLIBC_2.41 sched_setattr F
 GLIBC_2.42 __inet_ntop_chk F
 GLIBC_2.42 __inet_pton_chk F
+GLIBC_2.42 cfgetibaud F
 GLIBC_2.42 cfgetispeed F
+GLIBC_2.42 cfgetobaud F
 GLIBC_2.42 cfgetospeed F
+GLIBC_2.42 cfsetbaud F
+GLIBC_2.42 cfsetibaud F
 GLIBC_2.42 cfsetispeed F
+GLIBC_2.42 cfsetobaud F
 GLIBC_2.42 cfsetospeed F
 GLIBC_2.42 cfsetspeed F
 GLIBC_2.42 pthread_gettid_np F
index f3c0c0205249cb746e934a5fc47b43a7338f5ec6..84cd9e0e18c7712ee1925d995705d4717a4df72a 100644 (file)
@@ -3187,9 +3187,14 @@ GLIBC_2.41 sched_getattr F
 GLIBC_2.41 sched_setattr F
 GLIBC_2.42 __inet_ntop_chk F
 GLIBC_2.42 __inet_pton_chk F
+GLIBC_2.42 cfgetibaud F
 GLIBC_2.42 cfgetispeed F
+GLIBC_2.42 cfgetobaud F
 GLIBC_2.42 cfgetospeed F
+GLIBC_2.42 cfsetbaud F
+GLIBC_2.42 cfsetibaud F
 GLIBC_2.42 cfsetispeed F
+GLIBC_2.42 cfsetobaud F
 GLIBC_2.42 cfsetospeed F
 GLIBC_2.42 cfsetspeed F
 GLIBC_2.42 pthread_gettid_np F
index 6e1d141ca7fdc747a90cb98bb33a4018c7c0342a..8832568ab3bf0a4cfbff3e5a1a21c7ab1a10db0b 100644 (file)
@@ -2896,9 +2896,14 @@ GLIBC_2.41 sched_getattr F
 GLIBC_2.41 sched_setattr F
 GLIBC_2.42 __inet_ntop_chk F
 GLIBC_2.42 __inet_pton_chk F
+GLIBC_2.42 cfgetibaud F
 GLIBC_2.42 cfgetispeed F
+GLIBC_2.42 cfgetobaud F
 GLIBC_2.42 cfgetospeed F
+GLIBC_2.42 cfsetbaud F
+GLIBC_2.42 cfsetibaud F
 GLIBC_2.42 cfsetispeed F
+GLIBC_2.42 cfsetobaud F
 GLIBC_2.42 cfsetospeed F
 GLIBC_2.42 cfsetspeed F
 GLIBC_2.42 pthread_gettid_np F
index 441296c7e8bad108654e072a74bc306d5e5bef4f..b6ff8016e4b396498d9be34c77931988c2aa382b 100644 (file)
@@ -2972,9 +2972,14 @@ GLIBC_2.41 sched_getattr F
 GLIBC_2.41 sched_setattr F
 GLIBC_2.42 __inet_ntop_chk F
 GLIBC_2.42 __inet_pton_chk F
+GLIBC_2.42 cfgetibaud F
 GLIBC_2.42 cfgetispeed F
+GLIBC_2.42 cfgetobaud F
 GLIBC_2.42 cfgetospeed F
+GLIBC_2.42 cfsetbaud F
+GLIBC_2.42 cfsetibaud F
 GLIBC_2.42 cfsetispeed F
+GLIBC_2.42 cfsetobaud F
 GLIBC_2.42 cfsetospeed F
 GLIBC_2.42 cfsetspeed F
 GLIBC_2.42 pthread_gettid_np F
index bcc0ed8d6a5f71a7e98128f4aad277603dde4176..1771a2370c5a9bc54af33d47350971c988abacd8 100644 (file)
@@ -2516,9 +2516,14 @@ GLIBC_2.41 sched_getattr F
 GLIBC_2.41 sched_setattr F
 GLIBC_2.42 __inet_ntop_chk F
 GLIBC_2.42 __inet_pton_chk F
+GLIBC_2.42 cfgetibaud F
 GLIBC_2.42 cfgetispeed F
+GLIBC_2.42 cfgetobaud F
 GLIBC_2.42 cfgetospeed F
+GLIBC_2.42 cfsetbaud F
+GLIBC_2.42 cfsetibaud F
 GLIBC_2.42 cfsetispeed F
+GLIBC_2.42 cfsetobaud F
 GLIBC_2.42 cfsetospeed F
 GLIBC_2.42 cfsetspeed F
 GLIBC_2.42 pthread_gettid_np F
index d55b553c0e3988cba6d23fc34a1ea76fdb7a2864..4b48352fd99b4db201988b297460cad9db55d890 100644 (file)
@@ -2716,9 +2716,14 @@ GLIBC_2.41 sched_getattr F
 GLIBC_2.41 sched_setattr F
 GLIBC_2.42 __inet_ntop_chk F
 GLIBC_2.42 __inet_pton_chk F
+GLIBC_2.42 cfgetibaud F
 GLIBC_2.42 cfgetispeed F
+GLIBC_2.42 cfgetobaud F
 GLIBC_2.42 cfgetospeed F
+GLIBC_2.42 cfsetbaud F
+GLIBC_2.42 cfsetibaud F
 GLIBC_2.42 cfsetispeed F
+GLIBC_2.42 cfsetobaud F
 GLIBC_2.42 cfsetospeed F
 GLIBC_2.42 cfsetspeed F
 GLIBC_2.42 pthread_gettid_np F
index a45b8874f0a3740d4dd28bb83257bb1bf13555d9..f0decc787bab9420351e6a059108f22ba78d6718 100644 (file)
@@ -3140,9 +3140,14 @@ GLIBC_2.41 sched_getattr F
 GLIBC_2.41 sched_setattr F
 GLIBC_2.42 __inet_ntop_chk F
 GLIBC_2.42 __inet_pton_chk F
+GLIBC_2.42 cfgetibaud F
 GLIBC_2.42 cfgetispeed F
+GLIBC_2.42 cfgetobaud F
 GLIBC_2.42 cfgetospeed F
+GLIBC_2.42 cfsetbaud F
+GLIBC_2.42 cfsetibaud F
 GLIBC_2.42 cfsetispeed F
+GLIBC_2.42 cfsetobaud F
 GLIBC_2.42 cfsetospeed F
 GLIBC_2.42 cfsetspeed F
 GLIBC_2.42 pthread_gettid_np F
index 17483dcc48959e271ed97ccdcfdb7976976eed38..da8a2bfb74aafa5858de2e1b7a879023b4dc18e2 100644 (file)
@@ -2933,9 +2933,14 @@ GLIBC_2.41 sched_getattr F
 GLIBC_2.41 sched_setattr F
 GLIBC_2.42 __inet_ntop_chk F
 GLIBC_2.42 __inet_pton_chk F
+GLIBC_2.42 cfgetibaud F
 GLIBC_2.42 cfgetispeed F
+GLIBC_2.42 cfgetobaud F
 GLIBC_2.42 cfgetospeed F
+GLIBC_2.42 cfsetbaud F
+GLIBC_2.42 cfsetibaud F
 GLIBC_2.42 cfsetispeed F
+GLIBC_2.42 cfsetobaud F
 GLIBC_2.42 cfsetospeed F
 GLIBC_2.42 cfsetspeed F
 GLIBC_2.42 pthread_gettid_np F
index cb62b6e083eb7d2a3716765d5005dcc3d1f1ebb0..fb303418946b0829098a2576946148878b640455 100644 (file)
@@ -2832,9 +2832,14 @@ GLIBC_2.41 sched_getattr F
 GLIBC_2.41 sched_setattr F
 GLIBC_2.42 __inet_ntop_chk F
 GLIBC_2.42 __inet_pton_chk F
+GLIBC_2.42 cfgetibaud F
 GLIBC_2.42 cfgetispeed F
+GLIBC_2.42 cfgetobaud F
 GLIBC_2.42 cfgetospeed F
+GLIBC_2.42 cfsetbaud F
+GLIBC_2.42 cfsetibaud F
 GLIBC_2.42 cfsetispeed F
+GLIBC_2.42 cfsetobaud F
 GLIBC_2.42 cfsetospeed F
 GLIBC_2.42 cfsetspeed F
 GLIBC_2.42 pthread_gettid_np F
index ee6f2d017073b8b548b8b7eebf16c18c6b58e4e7..d716673432786fc84d8c4173918b30527bc28918 100644 (file)
@@ -2829,9 +2829,14 @@ GLIBC_2.41 sched_getattr F
 GLIBC_2.41 sched_setattr F
 GLIBC_2.42 __inet_ntop_chk F
 GLIBC_2.42 __inet_pton_chk F
+GLIBC_2.42 cfgetibaud F
 GLIBC_2.42 cfgetispeed F
+GLIBC_2.42 cfgetobaud F
 GLIBC_2.42 cfgetospeed F
+GLIBC_2.42 cfsetbaud F
+GLIBC_2.42 cfsetibaud F
 GLIBC_2.42 cfsetispeed F
+GLIBC_2.42 cfsetobaud F
 GLIBC_2.42 cfsetospeed F
 GLIBC_2.42 cfsetspeed F
 GLIBC_2.42 pthread_gettid_np F
index 943e130d3a8af0be604121d0c8386926755ab4f2..6deedf216dbeea810301deacd99b368fd66f697d 100644 (file)
@@ -3161,9 +3161,14 @@ GLIBC_2.41 sched_getattr F
 GLIBC_2.41 sched_setattr F
 GLIBC_2.42 __inet_ntop_chk F
 GLIBC_2.42 __inet_pton_chk F
+GLIBC_2.42 cfgetibaud F
 GLIBC_2.42 cfgetispeed F
+GLIBC_2.42 cfgetobaud F
 GLIBC_2.42 cfgetospeed F
+GLIBC_2.42 cfsetbaud F
+GLIBC_2.42 cfsetibaud F
 GLIBC_2.42 cfsetispeed F
+GLIBC_2.42 cfsetobaud F
 GLIBC_2.42 cfsetospeed F
 GLIBC_2.42 cfsetspeed F
 GLIBC_2.42 pthread_gettid_np F
index 1017babb1d593987f74def595db669ca8a8c5353..1ce22bf036b7f1f4fe2f3f362be2f76f453ee801 100644 (file)
@@ -2797,9 +2797,14 @@ GLIBC_2.41 sched_getattr F
 GLIBC_2.41 sched_setattr F
 GLIBC_2.42 __inet_ntop_chk F
 GLIBC_2.42 __inet_pton_chk F
+GLIBC_2.42 cfgetibaud F
 GLIBC_2.42 cfgetispeed F
+GLIBC_2.42 cfgetobaud F
 GLIBC_2.42 cfgetospeed F
+GLIBC_2.42 cfsetbaud F
+GLIBC_2.42 cfsetibaud F
 GLIBC_2.42 cfsetispeed F
+GLIBC_2.42 cfsetobaud F
 GLIBC_2.42 cfsetospeed F
 GLIBC_2.42 cfsetspeed F
 GLIBC_2.42 pthread_gettid_np F
index c9f4bb9d3f63c4e800d9041475a45fdc5d107b98..4efb0ded59bafe02a6108abccc9e97ec5430eea2 100644 (file)
@@ -263,6 +263,7 @@ __cfgetospeed (const struct termios *termios_p)
 {
   return termios_p->c_ospeed;
 }
+libc_hidden_def (__cfgetospeed)
 versioned_symbol (libc, __cfgetospeed, cfgetospeed, GLIBC_2_42);
 
 /* Return the input baud rate stored in *TERMIOS_P.  */
@@ -271,6 +272,7 @@ __cfgetispeed (const struct termios *termios_p)
 {
   return termios_p->c_ispeed;
 }
+libc_hidden_def (__cfgetispeed)
 versioned_symbol (libc, __cfgetispeed, cfgetispeed, GLIBC_2_42);
 
 /* Set the output baud rate stored in *TERMIOS_P to SPEED.  */
@@ -285,6 +287,7 @@ __cfsetospeed (struct termios *termios_p, speed_t speed)
 
   return 0;
 }
+libc_hidden_def (__cfsetospeed)
 versioned_symbol (libc, __cfsetospeed, cfsetospeed, GLIBC_2_42);
 
 /* Set the input baud rate stored in *TERMIOS_P to SPEED. */
@@ -299,6 +302,7 @@ __cfsetispeed (struct termios *termios_p, speed_t speed)
 
   return 0;
 }
+libc_hidden_def (__cfsetispeed)
 versioned_symbol (libc, __cfsetispeed, cfsetispeed, GLIBC_2_42);
 
 #if _TERMIOS_OLD_COMPAT
index ccf6ca2c8876043d5a8b1d045ecd3da46c1dc243..564877250b25050d00872cf0299cf4454d06d3a9 100644 (file)
@@ -2748,9 +2748,14 @@ GLIBC_2.41 sched_getattr F
 GLIBC_2.41 sched_setattr F
 GLIBC_2.42 __inet_ntop_chk F
 GLIBC_2.42 __inet_pton_chk F
+GLIBC_2.42 cfgetibaud F
 GLIBC_2.42 cfgetispeed F
+GLIBC_2.42 cfgetobaud F
 GLIBC_2.42 cfgetospeed F
+GLIBC_2.42 cfsetbaud F
+GLIBC_2.42 cfsetibaud F
 GLIBC_2.42 cfsetispeed F
+GLIBC_2.42 cfsetobaud F
 GLIBC_2.42 cfsetospeed F
 GLIBC_2.42 cfsetspeed F
 GLIBC_2.42 pthread_gettid_np F
index 1e3e283954d5e206745b9bd60fe31e904b1f76ab..25a39d094342cedbfdf88d8af522a022bc297927 100644 (file)
@@ -2767,9 +2767,14 @@ GLIBC_2.41 sched_getattr F
 GLIBC_2.41 sched_setattr F
 GLIBC_2.42 __inet_ntop_chk F
 GLIBC_2.42 __inet_pton_chk F
+GLIBC_2.42 cfgetibaud F
 GLIBC_2.42 cfgetispeed F
+GLIBC_2.42 cfgetobaud F
 GLIBC_2.42 cfgetospeed F
+GLIBC_2.42 cfsetbaud F
+GLIBC_2.42 cfsetibaud F
 GLIBC_2.42 cfsetispeed F
+GLIBC_2.42 cfsetobaud F
 GLIBC_2.42 cfsetospeed F
 GLIBC_2.42 cfsetspeed F
 GLIBC_2.42 pthread_gettid_np F
index 43235346f2dbaa323724cfdfc1b15c1a77b1ca29..7dc3830ab6ef4afd4fa99294a437d0a5db5f1fd8 100644 (file)
@@ -26,7 +26,8 @@ headers       := termios.h bits/termios.h bits/termios-baud.h \
           sys/ttydefaults.h sys/termios.h sys/ttychars.h
 
 routines       := speed cfsetspeed tcsetattr tcgetattr tcgetpgrp tcsetpgrp \
-                  tcdrain tcflow tcflush tcsendbrk cfmakeraw tcgetsid
+                  tcdrain tcflow tcflush tcsendbrk cfmakeraw tcgetsid \
+                  baud cfsetbaud
 
 include ../Rules
 
index 711ed0334b52fe95d20f59c273e7b344d08fc33a..a5eec8325753a2a9d9a0fe89892204674e5749b6 100644 (file)
@@ -11,4 +11,8 @@ libc {
     # t*
     tcgetsid;
   }
+  GLIBC_2.42 {
+    # cf*baud
+    cfgetibaud; cfgetobaud; cfsetibaud; cfsetobaud; cfsetbaud;
+  }
 }
diff --git a/termios/baud.c b/termios/baud.c
new file mode 100644 (file)
index 0000000..27c06e9
--- /dev/null
@@ -0,0 +1,56 @@
+/* `struct termios' speed frobnication functions, baud rate wrappers.
+   Any platform which doesn't have Bxxx == xxx for all baud rate
+   constants will need to override this file.
+
+   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
+   <https://www.gnu.org/licenses/>.  */
+
+#include <stddef.h>
+#include <errno.h>
+#include <termios.h>
+
+baud_t
+__cfgetobaud (const struct termios *termios_p)
+{
+  return __cfgetospeed (termios_p);
+}
+libc_hidden_def (__cfgetobaud)
+weak_alias (__cfgetobaud, cfgetobaud)
+
+baud_t
+__cfgetibaud (const struct termios *termios_p)
+{
+  return __cfgetispeed (termios_p);
+}
+libc_hidden_def (__cfgetibaud)
+weak_alias (__cfgetibaud, cfgetibaud)
+
+int
+__cfsetobaud (struct termios *termios_p, baud_t baud)
+{
+  return __cfsetospeed (termios_p, baud);
+}
+libc_hidden_def (__cfsetobaud)
+weak_alias (__cfsetobaud, cfsetobaud)
+
+int
+__cfsetibaud (struct termios *termios_p, baud_t baud)
+{
+  return __cfsetispeed (termios_p, baud);
+}
+libc_hidden_def (__cfsetibaud)
+weak_alias (__cfsetibaud, cfsetibaud)
diff --git a/termios/cfsetbaud.c b/termios/cfsetbaud.c
new file mode 100644 (file)
index 0000000..b76b51e
--- /dev/null
@@ -0,0 +1,29 @@
+/* Copyright (C) 1992-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/>.  */
+
+#include <termios.h>
+#include <errno.h>
+#include <stddef.h>
+
+/* Set both the input and output baud rates stored in *TERMIOS_P to BAUD.  */
+int
+__cfsetbaud (struct termios *termios_p, baud_t baud)
+{
+  return __cfsetspeed (termios_p, baud);
+}
+libc_hidden_def (__cfsetbaud)
+weak_alias (__cfsetbaud, cfsetbaud)
index 257c6387aaa0eb82de908ac319296e9f8f6c93d4..a68e63a9a0c3a5f33b62ce0b8b221ac78be34519 100644 (file)
 
 /* Set both the input and output baud rates stored in *TERMIOS_P to SPEED.  */
 int
-cfsetspeed (struct termios *termios_p, speed_t speed)
+__cfsetspeed (struct termios *termios_p, speed_t speed)
 {
   int rv;
 
-  rv = cfsetospeed (termios_p, speed);
+  rv = __cfsetospeed (termios_p, speed);
   if (rv)
     return rv;
 
-  return cfsetispeed (termios_p, speed);
+  return __cfsetispeed (termios_p, speed);
 }
+libc_hidden_def (__cfsetspeed)
+weak_alias (__cfsetspeed, cfsetspeed)
index d65bf03567f348ec46dfa55b18167f5cc3f81eef..5030621518fa990733657d6bc74a7b5cdeae05e9 100644 (file)
 
 /* Return the output baud rate stored in *TERMIOS_P.  */
 speed_t
-cfgetospeed (const struct termios *termios_p)
+__cfgetospeed (const struct termios *termios_p)
 {
   return termios_p->__ospeed;
 }
+libc_hidden_def (__cfgetospeed)
+weak_alias (__cfgetospeed, cfgetospeed)
 
 /* Return the input baud rate stored in *TERMIOS_P.  */
 speed_t
-cfgetispeed (const struct termios *termios_p)
+__cfgetispeed (const struct termios *termios_p)
 {
   return termios_p->__ispeed;
 }
+libc_hidden_def (__cfgetispeed)
+weak_alias (__cfgetispeed, cfgetispeed)
 
 /* Set the output baud rate stored in *TERMIOS_P to SPEED.  */
 int
-cfsetospeed (struct termios *termios_p, speed_t speed)
+__cfsetospeed (struct termios *termios_p, speed_t speed)
 {
   if (termios_p == NULL)
     {
@@ -47,11 +51,12 @@ cfsetospeed (struct termios *termios_p, speed_t speed)
   termios_p->__ospeed = speed;
   return 0;
 }
-libc_hidden_def (cfsetospeed)
+libc_hidden_def (__cfsetospeed)
+weak_alias (__cfsetospeed, cfsetospeed)
 
 /* Set the input baud rate stored in *TERMIOS_P to SPEED.  */
 int
-cfsetispeed (struct termios *termios_p, speed_t speed)
+__cfsetispeed (struct termios *termios_p, speed_t speed)
 {
   if (termios_p == NULL)
     {
@@ -62,4 +67,5 @@ cfsetispeed (struct termios *termios_p, speed_t speed)
   termios_p->__ispeed = speed;
   return 0;
 }
-libc_hidden_def (cfsetispeed)
+libc_hidden_def (__cfsetispeed)
+weak_alias (__cfsetispeed, cfsetispeed)
index 1755c505272f68ac919af4f1d706b8e535850eb8..788c982405966f6da8769c87c8d968bd48f4f7ee 100644 (file)
@@ -59,8 +59,25 @@ extern int cfsetispeed (struct termios *__termios_p, speed_t __speed) __THROW;
 #ifdef __USE_MISC
 /* Set both the input and output baud rates in *TERMIOS_OP to SPEED.  */
 extern int cfsetspeed (struct termios *__termios_p, speed_t __speed) __THROW;
-#endif
 
+/* Interfaces that are explicitly numeric representations of baud rates */
+typedef speed_t baud_t;
+
+/* Return the output baud rate stored in *TERMIOS_P.  */
+extern baud_t cfgetobaud (const struct termios *__termios_p) __THROW;
+
+/* Return the input baud rate stored in *TERMIOS_P.  */
+extern baud_t cfgetibaud (const struct termios *__termios_p) __THROW;
+
+/* Set the output baud rate stored in *TERMIOS_P to BAUD.  */
+extern int cfsetobaud (struct termios *__termios_p, baud_t __baud) __THROW;
+
+/* Set the input baud rate stored in *TERMIOS_P to BAUD.  */
+extern int cfsetibaud (struct termios *__termios_p, baud_t __baud) __THROW;
+
+/* Set both the input and output baud rates in *TERMIOS_OP to BAUD.  */
+extern int cfsetbaud (struct termios *__termios_p, baud_t __baud) __THROW;
+#endif
 
 /* Put the state of FD into *TERMIOS_P.  */
 extern int tcgetattr (int __fd, struct termios *__termios_p) __THROW;