comparison src/module.rs @ 6:2ec97116d72c

Updates for rustc 1.0.0-beta
author Jesse Hallett <jesse@galois.com>
date Fri, 03 Apr 2015 23:16:44 -0700
parents b195a14058bb
children 9380392b9a60
comparison
equal deleted inserted replaced
5:a5cc18a3db47 6:2ec97116d72c
23 23
24 #[link(name = "pam")] 24 #[link(name = "pam")]
25 extern { 25 extern {
26 fn pam_get_data(pamh: *const PamHandleT, 26 fn pam_get_data(pamh: *const PamHandleT,
27 module_data_name: *const c_char, 27 module_data_name: *const c_char,
28 data: & *mut PamDataT, 28 data: &mut *const PamDataT,
29 ) -> PamResultCode; 29 ) -> PamResultCode;
30 30
31 fn pam_set_data(pamh: *const PamHandleT, 31 fn pam_set_data(pamh: *const PamHandleT,
32 module_data_name: *const c_char, 32 module_data_name: *const c_char,
33 data: Box<PamDataT>, 33 data: Box<PamDataT>,
37 ), 37 ),
38 ) -> PamResultCode; 38 ) -> PamResultCode;
39 39
40 fn pam_get_item(pamh: *const PamHandleT, 40 fn pam_get_item(pamh: *const PamHandleT,
41 item_type: PamItemType, 41 item_type: PamItemType,
42 item: & *mut PamItemT, 42 item: &mut *const PamItemT,
43 ) -> PamResultCode; 43 ) -> PamResultCode;
44 44
45 fn pam_set_item(pamh: *mut PamHandleT, 45 fn pam_set_item(pamh: *mut PamHandleT,
46 item_type: PamItemType, 46 item_type: PamItemType,
47 item: &PamItemT, 47 item: &PamItemT,
77 /// 77 ///
78 /// See `pam_get_data` in 78 /// See `pam_get_data` in
79 /// http://www.linux-pam.org/Linux-PAM-html/mwg-expected-by-module-item.html 79 /// http://www.linux-pam.org/Linux-PAM-html/mwg-expected-by-module-item.html
80 pub unsafe fn get_data<'a, T>(pamh: &'a PamHandleT, key: &str) -> PamResult<&'a T> { 80 pub unsafe fn get_data<'a, T>(pamh: &'a PamHandleT, key: &str) -> PamResult<&'a T> {
81 let c_key = CString::new(key).unwrap().as_ptr(); 81 let c_key = CString::new(key).unwrap().as_ptr();
82 let mut ptr: *mut PamDataT = ptr::null_mut(); 82 let mut ptr: *const PamDataT = ptr::null();
83 let res = pam_get_data(pamh, c_key, &mut ptr); 83 let res = pam_get_data(pamh, c_key, &mut ptr);
84 if constants::PAM_SUCCESS == res && !ptr.is_null() { 84 if constants::PAM_SUCCESS == res && !ptr.is_null() {
85 let raw_data: &PamDataT = ptr.as_ref().unwrap(); 85 let typed_ptr: *const T = mem::transmute(ptr);
86 let data: &T = mem::transmute(raw_data); 86 let data: &T = &*typed_ptr;
87 Ok(data) 87 Ok(data)
88 } 88 }
89 else { 89 else {
90 Err(res) 90 Err(res)
91 } 91 }
117 /// particularly useful for getting a `PamConv` reference. 117 /// particularly useful for getting a `PamConv` reference.
118 /// 118 ///
119 /// See `pam_get_item` in 119 /// See `pam_get_item` in
120 /// http://www.linux-pam.org/Linux-PAM-html/mwg-expected-by-module-item.html 120 /// http://www.linux-pam.org/Linux-PAM-html/mwg-expected-by-module-item.html
121 pub fn get_item<'a, T: PamItem>(pamh: &'a PamHandleT) -> PamResult<&'a T> { 121 pub fn get_item<'a, T: PamItem>(pamh: &'a PamHandleT) -> PamResult<&'a T> {
122 let ptr: *mut PamItemT = ptr::null_mut(); 122 let mut ptr: *const PamItemT = ptr::null();
123 let (res, item) = unsafe { 123 let (res, item) = unsafe {
124 let r = pam_get_item(pamh, PamItem::item_type(None::<T>), &ptr); 124 let r = pam_get_item(pamh, PamItem::item_type(None::<T>), &mut ptr);
125 let raw_item: &PamItemT = ptr.as_ref().unwrap(); 125 let typed_ptr: *const T = mem::transmute(ptr);
126 let t: &T = mem::transmute(raw_item); 126 let t: &T = &*typed_ptr;
127 (r, t) 127 (r, t)
128 }; 128 };
129 if constants::PAM_SUCCESS == res { Ok(item) } else { Err(res) } 129 if constants::PAM_SUCCESS == res { Ok(item) } else { Err(res) }
130 } 130 }
131 131