From 5b7bcc462f37e9ba37504c7d2b3d3e91d643c635 Mon Sep 17 00:00:00 2001 From: Qiu Chaofan Date: Mon, 29 Aug 2022 16:07:14 +0800 Subject: [PATCH] Support AIX operating system --- src/lib.rs | 1 + src/platform.rs | 2 +- src/tz_aix.rs | 26 ++++++++++++++++++++++++++ 3 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 src/tz_aix.rs diff --git a/src/lib.rs b/src/lib.rs index 81c321f..b98c155 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -52,6 +52,7 @@ mod ffi_utils; any(target_os = "illumos", target_os = "solaris"), path = "tz_illumos.rs" )] +#[cfg_attr(target_os = "aix", path = "tz_aix.rs")] #[cfg_attr(target_os = "android", path = "tz_android.rs")] #[cfg_attr(target_os = "haiku", path = "tz_haiku.rs")] mod platform; diff --git a/src/platform.rs b/src/platform.rs index 5992bf3..e83e874 100644 --- a/src/platform.rs +++ b/src/platform.rs @@ -5,5 +5,5 @@ pub fn get_timezone_inner() -> std::result::Result Result { + env::var("TZ").map_err(|_| crate::GetTimezoneError::OsError) +} + +fn read_environment() -> Result { + // https://www.ibm.com/docs/en/aix/7.2?topic=files-environment-file + + let file = OpenOptions::new().read(true).open("/etc/environment")?; + let mut reader = BufReader::new(file); + let mut line = String::with_capacity(80); + loop { + line.clear(); + let count = reader.read_line(&mut line)?; + if count == 0 { + return Err(crate::GetTimezoneError::FailedParsingString); + } else if line.starts_with("TZ=") { + line.truncate(line.trim_end().len()); + line.replace_range(..3, ""); + return Ok(line); + } + } +}