diff --git a/Cargo.lock b/Cargo.lock index 59992db..e4ee481 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,12 +2,6 @@ # It is not intended for manual editing. version = 3 -[[package]] -name = "adler2" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" - [[package]] name = "aho-corasick" version = "1.1.3" @@ -211,15 +205,6 @@ version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" -[[package]] -name = "crc32fast" -version = "1.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" -dependencies = [ - "cfg-if", -] - [[package]] name = "crossbeam-deque" version = "0.8.5" @@ -294,16 +279,6 @@ version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e8c02a5121d4ea3eb16a80748c74f5549a5665e4c21333c6098f283870fbdea6" -[[package]] -name = "flate2" -version = "1.0.35" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c936bfdafb507ebbf50b8074c54fa31c5be9a1e7e5f467dd659697041407d07c" -dependencies = [ - "crc32fast", - "miniz_oxide", -] - [[package]] name = "fnv" version = "1.0.7" @@ -430,15 +405,6 @@ version = "2.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" -[[package]] -name = "miniz_oxide" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2d80299ef12ff69b16a84bb182e3b9df68b5a91574d3d4fa6e41b65deec4df1" -dependencies = [ - "adler2", -] - [[package]] name = "nix" version = "0.29.0" @@ -619,8 +585,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cc5b72d8145275d844d4b5f6d4e1eef00c8cd889edb6035c21675d1bb1f45c9f" dependencies = [ "bitflags 2.6.0", - "chrono", - "flate2", "hex", "procfs-core", "rustix 0.38.39", @@ -633,7 +597,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "239df02d8349b06fc07398a3a1697b06418223b1c7725085e801e7c0fc6a12ec" dependencies = [ "bitflags 2.6.0", - "chrono", "hex", ] @@ -1045,7 +1008,6 @@ version = "0.0.1" dependencies = [ "chrono", "clap", - "procfs", "regex", "serde", "serde_json", diff --git a/src/uu/dmesg/Cargo.toml b/src/uu/dmesg/Cargo.toml index 5b95a2c..c6a8870 100644 --- a/src/uu/dmesg/Cargo.toml +++ b/src/uu/dmesg/Cargo.toml @@ -17,7 +17,6 @@ regex = { workspace = true } serde_json = { workspace = true } serde = { workspace = true } chrono = "0.4.38" -procfs = "0.17" [features] fixed-boot-time = [] diff --git a/src/uu/dmesg/src/time_formatter.rs b/src/uu/dmesg/src/time_formatter.rs index 4f21ab5..8c09907 100644 --- a/src/uu/dmesg/src/time_formatter.rs +++ b/src/uu/dmesg/src/time_formatter.rs @@ -130,6 +130,40 @@ fn boot_time() -> DateTime<FixedOffset> { } #[cfg(not(feature = "fixed-boot-time"))] +#[cfg(unix)] +#[cfg(not(target_os = "openbsd"))] fn boot_time() -> DateTime<FixedOffset> { - *BOOT_TIME.get_or_init(|| procfs::boot_time().unwrap().into()) + *BOOT_TIME.get_or_init(|| boot_time_from_utmpx().unwrap()) +} + +#[cfg(not(feature = "fixed-boot-time"))] +#[cfg(windows)] +fn boot_time() -> DateTime<FixedOffset> { + // TODO: get windows boot time + *BOOT_TIME.get_or_init(|| chrono::DateTime::from_timestamp(0, 0).unwrap().into()) +} + +#[cfg(not(feature = "fixed-boot-time"))] +#[cfg(target_os = "openbsd")] +fn boot_time() -> DateTime<FixedOffset> { + // TODO: get openbsd boot time + *BOOT_TIME.get_or_init(|| chrono::DateTime::from_timestamp(0, 0).unwrap().into()) +} + +#[cfg(not(feature = "fixed-boot-time"))] +#[cfg(unix)] +#[cfg(not(target_os = "openbsd"))] +fn boot_time_from_utmpx() -> Option<DateTime<FixedOffset>> { + for record in uucore::utmpx::Utmpx::iter_all_records() { + if record.record_type() == uucore::utmpx::BOOT_TIME { + let t = record.login_time(); + return Some( + chrono::DateTime::from_timestamp(t.unix_timestamp(), t.nanosecond()) + .unwrap() + .with_timezone(&chrono::Local) + .into(), + ); + } + } + None }