| // Copyright 2020 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| //! Type-safe bindings for Zircon version-string call. |
| |
| use fuchsia_zircon_sys as sys; |
| use std::slice; |
| use std::str; |
| |
| /// Return a version string describing the system (kernel). |
| /// This string never changes. |
| /// |
| /// Wraps the |
| /// [zx_system_get_version_string](https://fuchsia.dev/fuchsia-src/reference/syscalls/system_get_version_string.md) |
| /// syscall. |
| pub fn system_get_version_string() -> &'static str { |
| unsafe { |
| let sv = sys::zx_system_get_version_string(); |
| let slice: &'static [u8] = slice::from_raw_parts(sv.c_str, sv.length); |
| str::from_utf8_unchecked(slice) |
| } |
| } |
| |
| #[cfg(test)] |
| mod tests { |
| use super::*; |
| use crate::Status; |
| |
| #[test] |
| fn get_version_string() -> Result<(), Status> { |
| let sv = system_get_version_string(); |
| let s = sv.to_string(); |
| |
| // Incremental builders set kernel version string to "nostamp". |
| // See https://fxbug.dev/42154518 for details. |
| if s != "nostamp" { |
| assert!( |
| sv.len() > 20, |
| "system version string [{}] length {} should be > 20", |
| s, |
| sv.len() |
| ); |
| assert!( |
| sv.len() < 100, |
| "system version string [{}] length {} should be < 100", |
| s, |
| sv.len() |
| ); |
| assert_eq!(s, sv); |
| } |
| |
| Ok(()) |
| } |
| } |