// Copyright 2014 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::*; 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(target_os = "macos")] type pthread_key_t = ::libc::c_ulong; #[cfg(not(target_os = "macos"))] 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; }