Skip to content

Commit 3124475

Browse files
committed
Auto merge of #2508 - de-vri-es:tcgets2-and-friends, r=Amanieu
Add TCGETS2 and TCSETS2 (and variants) ioctl constants for Linux. I noticed that the `termios2` struct is already exposed, but the ioctl constants to use it are not. This PR adds the `TCGETS2`, `TCSETS2`, `TCSETSW2` and `TCSETSF2` on Linux so that you can actually do something with the `termios2` struct. The `powerpc` architecture is notably missing, because it does not seem to support the `TCGETS2`/`TCSETS2` ioctls. I *think* the constants are correct for all platforms, but I'm also not 100% sure. Do the unit tests verify the values for all supported platforms, by any chance?
2 parents afd3951 + 58a015c commit 3124475

File tree

12 files changed

+59
-2
lines changed

12 files changed

+59
-2
lines changed

libc-test/build.rs

+15-2
Original file line numberDiff line numberDiff line change
@@ -1659,6 +1659,10 @@ fn test_android(target: &str) {
16591659
// Requires Linux kernel 5.6
16601660
"VMADDR_CID_LOCAL" => true,
16611661

1662+
// FIXME: conflicts with standard C headers and is tested in
1663+
// `linux_termios.rs` below:
1664+
"TCGETS2" | "TCSETS2" | "TCSETSW2" | "TCSETSF2" => true,
1665+
16621666
_ => false,
16631667
}
16641668
});
@@ -2884,7 +2888,11 @@ fn test_linux(target: &str) {
28842888

28852889
// FIXME: conflicts with glibc headers and is tested in
28862890
// `linux_termios.rs` below:
2887-
"BOTHER" => true,
2891+
| "BOTHER"
2892+
| "TCGETS2"
2893+
| "TCSETS2"
2894+
| "TCSETSW2"
2895+
| "TCSETSF2" => true,
28882896

28892897
// FIXME: on musl the pthread types are defined a little differently
28902898
// - these constants are used by the glibc implementation.
@@ -3227,10 +3235,15 @@ fn test_linux_like_apis(target: &str) {
32273235
// test termios
32283236
let mut cfg = ctest_cfg();
32293237
cfg.header("asm/termbits.h");
3238+
cfg.header("linux/termios.h");
32303239
cfg.skip_type(|_| true)
32313240
.skip_static(|_| true)
32323241
.skip_fn(|_| true)
3233-
.skip_const(|c| c != "BOTHER")
3242+
.skip_const(|c| match c {
3243+
"BOTHER" => false,
3244+
"TCGETS2" | "TCSETS2" | "TCSETSW2" | "TCSETSF2" => false,
3245+
_ => true,
3246+
})
32343247
.skip_struct(|s| s != "termios2")
32353248
.type_name(move |ty, is_struct, is_union| match ty {
32363249
t if is_struct => format!("struct {}", t),

src/unix/linux_like/android/mod.rs

+4
Original file line numberDiff line numberDiff line change
@@ -1341,6 +1341,10 @@ pub const TCGETS: ::c_int = 0x5401;
13411341
pub const TCSETS: ::c_int = 0x5402;
13421342
pub const TCSETSW: ::c_int = 0x5403;
13431343
pub const TCSETSF: ::c_int = 0x5404;
1344+
pub const TCGETS2: ::c_int = 0x802c542a;
1345+
pub const TCSETS2: ::c_int = 0x402c542b;
1346+
pub const TCSETSW2: ::c_int = 0x402c542c;
1347+
pub const TCSETSF2: ::c_int = 0x402c542d;
13441348
pub const TCGETA: ::c_int = 0x5405;
13451349
pub const TCSETA: ::c_int = 0x5406;
13461350
pub const TCSETAW: ::c_int = 0x5407;

src/unix/linux_like/linux/gnu/b32/arm/mod.rs

+4
Original file line numberDiff line numberDiff line change
@@ -447,6 +447,10 @@ pub const TCGETS: ::c_ulong = 0x5401;
447447
pub const TCSETS: ::c_ulong = 0x5402;
448448
pub const TCSETSW: ::c_ulong = 0x5403;
449449
pub const TCSETSF: ::c_ulong = 0x5404;
450+
pub const TCGETS2: ::c_ulong = 0x802c542a;
451+
pub const TCSETS2: ::c_ulong = 0x402c542b;
452+
pub const TCSETSW2: ::c_ulong = 0x402c542c;
453+
pub const TCSETSF2: ::c_ulong = 0x402c542d;
450454
pub const TCGETA: ::c_ulong = 0x5405;
451455
pub const TCSETA: ::c_ulong = 0x5406;
452456
pub const TCSETAW: ::c_ulong = 0x5407;

src/unix/linux_like/linux/gnu/b32/mips/mod.rs

+4
Original file line numberDiff line numberDiff line change
@@ -730,6 +730,10 @@ pub const TCGETS: ::c_ulong = 0x540d;
730730
pub const TCSETS: ::c_ulong = 0x540e;
731731
pub const TCSETSW: ::c_ulong = 0x540f;
732732
pub const TCSETSF: ::c_ulong = 0x5410;
733+
pub const TCGETS2: ::c_ulong = 0x4030542a;
734+
pub const TCSETS2: ::c_ulong = 0x8030542b;
735+
pub const TCSETSW2: ::c_ulong = 0x8030542c;
736+
pub const TCSETSF2: ::c_ulong = 0x8030542d;
733737
pub const TCGETA: ::c_ulong = 0x5401;
734738
pub const TCSETA: ::c_ulong = 0x5402;
735739
pub const TCSETAW: ::c_ulong = 0x5403;

src/unix/linux_like/linux/gnu/b32/riscv32/mod.rs

+4
Original file line numberDiff line numberDiff line change
@@ -483,6 +483,10 @@ pub const TCGETS: ::c_ulong = 21505;
483483
pub const TCSETS: ::c_ulong = 21506;
484484
pub const TCSETSW: ::c_ulong = 21507;
485485
pub const TCSETSF: ::c_ulong = 21508;
486+
pub const TCGETS2: ::c_ulong = 0x802c542a;
487+
pub const TCSETS2: ::c_ulong = 0x402c542b;
488+
pub const TCSETSW2: ::c_ulong = 0x402c542c;
489+
pub const TCSETSF2: ::c_ulong = 0x402c542d;
486490
pub const TCGETA: ::c_ulong = 21509;
487491
pub const TCSETA: ::c_ulong = 21510;
488492
pub const TCSETAW: ::c_ulong = 21511;

src/unix/linux_like/linux/gnu/b32/sparc/mod.rs

+4
Original file line numberDiff line numberDiff line change
@@ -508,6 +508,10 @@ pub const TCGETS: ::c_ulong = 0x40245408;
508508
pub const TCSETS: ::c_ulong = 0x80245409;
509509
pub const TCSETSW: ::c_ulong = 0x8024540a;
510510
pub const TCSETSF: ::c_ulong = 0x8024540b;
511+
pub const TCGETS2: ::c_ulong = 0x402c540c;
512+
pub const TCSETS2: ::c_ulong = 0x802c540d;
513+
pub const TCSETSW2: ::c_ulong = 0x802c540e;
514+
pub const TCSETSF2: ::c_ulong = 0x802c540f;
511515
pub const TCGETA: ::c_ulong = 0x40125401;
512516
pub const TCSETA: ::c_ulong = 0x80125402;
513517
pub const TCSETAW: ::c_ulong = 0x80125403;

src/unix/linux_like/linux/gnu/b32/x86/mod.rs

+4
Original file line numberDiff line numberDiff line change
@@ -666,6 +666,10 @@ pub const TCGETS: ::c_ulong = 0x5401;
666666
pub const TCSETS: ::c_ulong = 0x5402;
667667
pub const TCSETSW: ::c_ulong = 0x5403;
668668
pub const TCSETSF: ::c_ulong = 0x5404;
669+
pub const TCGETS2: ::c_ulong = 0x802c542a;
670+
pub const TCSETS2: ::c_ulong = 0x402c542b;
671+
pub const TCSETSW2: ::c_ulong = 0x402c542c;
672+
pub const TCSETSF2: ::c_ulong = 0x402c542d;
669673
pub const TCGETA: ::c_ulong = 0x5405;
670674
pub const TCSETA: ::c_ulong = 0x5406;
671675
pub const TCSETAW: ::c_ulong = 0x5407;

src/unix/linux_like/linux/gnu/b64/aarch64/mod.rs

+4
Original file line numberDiff line numberDiff line change
@@ -560,6 +560,10 @@ pub const TCGETS: ::c_ulong = 0x5401;
560560
pub const TCSETS: ::c_ulong = 0x5402;
561561
pub const TCSETSW: ::c_ulong = 0x5403;
562562
pub const TCSETSF: ::c_ulong = 0x5404;
563+
pub const TCGETS2: ::c_ulong = 0x802c542a;
564+
pub const TCSETS2: ::c_ulong = 0x402c542b;
565+
pub const TCSETSW2: ::c_ulong = 0x402c542c;
566+
pub const TCSETSF2: ::c_ulong = 0x402c542d;
563567
pub const TCGETA: ::c_ulong = 0x5405;
564568
pub const TCSETA: ::c_ulong = 0x5406;
565569
pub const TCSETAW: ::c_ulong = 0x5407;

src/unix/linux_like/linux/gnu/b64/mips64/mod.rs

+4
Original file line numberDiff line numberDiff line change
@@ -830,6 +830,10 @@ pub const TCGETS: ::c_ulong = 0x540d;
830830
pub const TCSETS: ::c_ulong = 0x540e;
831831
pub const TCSETSW: ::c_ulong = 0x540f;
832832
pub const TCSETSF: ::c_ulong = 0x5410;
833+
pub const TCGETS2: ::c_ulong = 0x4030542a;
834+
pub const TCSETS2: ::c_ulong = 0x8030542b;
835+
pub const TCSETSW2: ::c_ulong = 0x8030542c;
836+
pub const TCSETSF2: ::c_ulong = 0x8030542d;
833837
pub const TCGETA: ::c_ulong = 0x5401;
834838
pub const TCSETA: ::c_ulong = 0x5402;
835839
pub const TCSETAW: ::c_ulong = 0x5403;

src/unix/linux_like/linux/gnu/b64/riscv64/mod.rs

+4
Original file line numberDiff line numberDiff line change
@@ -521,6 +521,10 @@ pub const TCGETS: ::c_ulong = 21505;
521521
pub const TCSETS: ::c_ulong = 21506;
522522
pub const TCSETSW: ::c_ulong = 21507;
523523
pub const TCSETSF: ::c_ulong = 21508;
524+
pub const TCGETS2: ::c_ulong = 0x802c542a;
525+
pub const TCSETS2: ::c_ulong = 0x402c542b;
526+
pub const TCSETSW2: ::c_ulong = 0x402c542c;
527+
pub const TCSETSF2: ::c_ulong = 0x402c542d;
524528
pub const TCGETA: ::c_ulong = 21509;
525529
pub const TCSETA: ::c_ulong = 21510;
526530
pub const TCSETAW: ::c_ulong = 21511;

src/unix/linux_like/linux/gnu/b64/sparc64/mod.rs

+4
Original file line numberDiff line numberDiff line change
@@ -587,6 +587,10 @@ pub const TCGETS: ::c_ulong = 0x40245408;
587587
pub const TCSETS: ::c_ulong = 0x80245409;
588588
pub const TCSETSW: ::c_ulong = 0x8024540a;
589589
pub const TCSETSF: ::c_ulong = 0x8024540b;
590+
pub const TCGETS2: ::c_ulong = 0x402c540c;
591+
pub const TCSETS2: ::c_ulong = 0x802c540d;
592+
pub const TCSETSW2: ::c_ulong = 0x802c540e;
593+
pub const TCSETSF2: ::c_ulong = 0x802c540f;
590594
pub const TCGETA: ::c_ulong = 0x40125401;
591595
pub const TCSETA: ::c_ulong = 0x80125402;
592596
pub const TCSETAW: ::c_ulong = 0x80125403;

src/unix/linux_like/linux/gnu/b64/x86_64/mod.rs

+4
Original file line numberDiff line numberDiff line change
@@ -772,6 +772,10 @@ pub const TCGETS: ::c_ulong = 0x5401;
772772
pub const TCSETS: ::c_ulong = 0x5402;
773773
pub const TCSETSW: ::c_ulong = 0x5403;
774774
pub const TCSETSF: ::c_ulong = 0x5404;
775+
pub const TCGETS2: ::c_ulong = 0x802c542a;
776+
pub const TCSETS2: ::c_ulong = 0x402c542b;
777+
pub const TCSETSW2: ::c_ulong = 0x402c542c;
778+
pub const TCSETSF2: ::c_ulong = 0x402c542d;
775779
pub const TCGETA: ::c_ulong = 0x5405;
776780
pub const TCSETA: ::c_ulong = 0x5406;
777781
pub const TCSETAW: ::c_ulong = 0x5407;

0 commit comments

Comments
 (0)