Mercurial > crates > nonstick
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 |