1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
// lib.rs // ************************************************************************* // * Copyright (C) 2019 Daniel Mueller (deso@posteo.net) * // * * // * This program is free software: you can redistribute it and/or modify * // * it under the terms of the GNU General Public License as published by * // * the Free Software Foundation, either version 3 of the License, or * // * (at your option) any later version. * // * * // * This program is distributed in the hope that it will be useful, * // * but WITHOUT ANY WARRANTY; without even the implied warranty of * // * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * // * GNU General Public License for more details. * // * * // * You should have received a copy of the GNU General Public License * // * along with this program. If not, see <http://www.gnu.org/licenses/>. * // ************************************************************************* #![deny( missing_copy_implementations, missing_debug_implementations, trivial_casts, trivial_numeric_casts, unstable_features, unused_import_braces, unused_qualifications, unused_results, )] #![warn( future_incompatible, rust_2018_compatibility, rust_2018_idioms, )] //! A crate capturing the state needed by the `nitrokey-test` crate. use std::sync; /// A function returning a `Mutex` used for serializing tests. pub fn mutex() -> &'static sync::Mutex<()> { static mut MUTEX: Option<sync::Mutex<()>> = None; static ONCE: sync::Once = sync::Once::new(); ONCE.call_once(|| unsafe { MUTEX = Some(sync::Mutex::new(())) }); match unsafe { &MUTEX } { Some(mutex) => mutex, None => unreachable!(), } }