summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2022-12-21 12:54:30 +0000
committerbors <bors@rust-lang.org>2022-12-21 12:54:30 +0000
commitc59ca735304319dd4face349f49fb77f2164b544 (patch)
treed3e0cae2f2f21b4caf17e19d52b39e69967c724c
parent45b431a79ec7f72c245fb0631f2d05a9f16ca5a8 (diff)
parent88d6a1fd9b4b62729bd55a76e727f5f1d0aeef20 (diff)
downloadrust-libc-c59ca735304319dd4face349f49fb77f2164b544.tar.gz
Auto merge of #3041 - devnexen:linux_kernel_version, r=JohnTitor
adding KERNEL_VERSION macro for linux.
-rw-r--r--libc-test/semver/linux.txt1
-rw-r--r--libc-test/test/linux_kernel_version.rs17
-rw-r--r--src/unix/linux_like/mod.rs8
3 files changed, 26 insertions, 0 deletions
diff --git a/libc-test/semver/linux.txt b/libc-test/semver/linux.txt
index e64ebe1918..871eb5cca2 100644
--- a/libc-test/semver/linux.txt
+++ b/libc-test/semver/linux.txt
@@ -1146,6 +1146,7 @@ J1939_PGN_ADDRESS_COMMANDED
J1939_PGN_MAX
J1939_PGN_PDU1_MAX
J1939_PGN_REQUEST
+KERNEL_VERSION
KEYCTL_ASSUME_AUTHORITY
KEYCTL_CHOWN
KEYCTL_CLEAR
diff --git a/libc-test/test/linux_kernel_version.rs b/libc-test/test/linux_kernel_version.rs
new file mode 100644
index 0000000000..c5687edad5
--- /dev/null
+++ b/libc-test/test/linux_kernel_version.rs
@@ -0,0 +1,17 @@
+//! Compare libc's KERNEL_VERSION macro against a specific kernel version.
+
+extern crate libc;
+
+#[cfg(
+ target_os = "linux",
+)]
+mod t {
+ use libc;
+
+ #[test]
+ fn test_kernel_version() {
+ unsafe {
+ assert_eq!(libc::KERNEL_VERSION(6, 0, 0), 393216);
+ }
+ }
+}
diff --git a/src/unix/linux_like/mod.rs b/src/unix/linux_like/mod.rs
index 8e738d87b8..e2e73b3300 100644
--- a/src/unix/linux_like/mod.rs
+++ b/src/unix/linux_like/mod.rs
@@ -1615,6 +1615,14 @@ safe_f! {
pub {const} fn IPTOS_ECN(x: u8) -> u8 {
x & ::IPTOS_ECN_MASK
}
+
+ #[allow(ellipsis_inclusive_range_patterns)]
+ pub {const} fn KERNEL_VERSION(a: u32, b: u32, c: u32) -> u32 {
+ ((a << 16) + (b << 8)) + match c {
+ 0 ... 255 => c,
+ _ => 255,
+ }
+ }
}
extern "C" {