From 98b7f2f9352e4d92b44245d0737f9a45adb4ae2b Mon Sep 17 00:00:00 2001 From: Steven Fackler Date: Sat, 22 Oct 2016 09:16:38 -0700 Subject: Flatten crypto module --- openssl/src/crypto/util.rs | 61 ---------------------------------------------- 1 file changed, 61 deletions(-) delete mode 100644 openssl/src/crypto/util.rs (limited to 'openssl/src/crypto/util.rs') diff --git a/openssl/src/crypto/util.rs b/openssl/src/crypto/util.rs deleted file mode 100644 index 68d9b32a..00000000 --- a/openssl/src/crypto/util.rs +++ /dev/null @@ -1,61 +0,0 @@ -use libc::{c_int, c_char, c_void}; - -use std::any::Any; -use std::panic::{self, AssertUnwindSafe}; -use std::slice; - -/// Wraps a user-supplied callback and a slot for panics thrown inside the callback (while FFI -/// frames are on the stack). -/// -/// When dropped, checks if the callback has panicked, and resumes unwinding if so. -pub struct CallbackState { - /// The user callback. Taken out of the `Option` when called. - cb: Option, - /// If the callback panics, we place the panic object here, to be re-thrown once OpenSSL - /// returns. - panic: Option>, -} - -impl CallbackState { - pub fn new(callback: F) -> Self { - CallbackState { - cb: Some(callback), - panic: None, - } - } -} - -impl Drop for CallbackState { - fn drop(&mut self) { - if let Some(panic) = self.panic.take() { - panic::resume_unwind(panic); - } - } -} - -/// Password callback function, passed to private key loading functions. -/// -/// `cb_state` is expected to be a pointer to a `CallbackState`. -pub unsafe extern fn invoke_passwd_cb(buf: *mut c_char, - size: c_int, - _rwflag: c_int, - cb_state: *mut c_void) - -> c_int - where F: FnOnce(&mut [c_char]) -> usize { - let callback = &mut *(cb_state as *mut CallbackState); - - let result = panic::catch_unwind(AssertUnwindSafe(|| { - // build a `i8` slice to pass to the user callback - let pass_slice = slice::from_raw_parts_mut(buf, size as usize); - - callback.cb.take().unwrap()(pass_slice) - })); - - match result { - Ok(len) => len as c_int, - Err(err) => { - callback.panic = Some(err); - 0 - } - } -} -- cgit v1.2.3