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 |
