// Copyright 2014-2015 The Rust Project Developers. See the COPYRIGHT // file at the top-level directory of this distribution and at // http://rust-lang.org/COPYRIGHT. // // Licensed under the Apache License, Version 2.0 or the MIT license // , at your // option. This file may not be copied, modified, or distributed // except according to those terms. use prelude::v1::*; use libc::c_int; pub type Key = pthread_key_t; #[inline] pub unsafe fn create(dtor: Option) -> Key { let mut key = 0; assert_eq!(pthread_key_create(&mut key, dtor), 0); return key; } #[inline] pub unsafe fn set(key: Key, value: *mut u8) { let r = pthread_setspecific(key, value); debug_assert_eq!(r, 0); } #[inline] pub unsafe fn get(key: Key) -> *mut u8 { pthread_getspecific(key) } #[inline] pub unsafe fn destroy(key: Key) { let r = pthread_key_delete(key); debug_assert_eq!(r, 0); } #[cfg(any(target_os = "macos", target_os = "ios"))] type pthread_key_t = ::libc::c_ulong; #[cfg(any(target_os = "freebsd", target_os = "dragonfly", target_os = "bitrig", target_os = "openbsd"))] type pthread_key_t = ::libc::c_int; #[cfg(not(any(target_os = "macos", target_os = "ios", target_os = "freebsd", target_os = "dragonfly", target_os = "bitrig", target_os = "openbsd")))] type pthread_key_t = ::libc::c_uint; extern { fn pthread_key_create(key: *mut pthread_key_t, dtor: Option) -> c_int; fn pthread_key_delete(key: pthread_key_t) -> c_int; fn pthread_getspecific(key: pthread_key_t) -> *mut u8; fn pthread_setspecific(key: pthread_key_t, value: *mut u8) -> c_int; }