diff options
Diffstat (limited to 'openssl/src/asn1/mod.rs')
| -rw-r--r-- | openssl/src/asn1/mod.rs | 39 |
1 files changed, 15 insertions, 24 deletions
diff --git a/openssl/src/asn1/mod.rs b/openssl/src/asn1/mod.rs index d5561b62..7d209775 100644 --- a/openssl/src/asn1/mod.rs +++ b/openssl/src/asn1/mod.rs @@ -2,47 +2,38 @@ use libc::c_long; use std::ptr; use ffi; -use ssl::error::SslError; +use error::ErrorStack; - -pub struct Asn1Time { - handle: *mut ffi::ASN1_TIME, - owned: bool, -} +pub struct Asn1Time(*mut ffi::ASN1_TIME); impl Asn1Time { /// Wraps existing ASN1_TIME and takes ownership - pub fn new(handle: *mut ffi::ASN1_TIME) -> Asn1Time { - Asn1Time { - handle: handle, - owned: true, - } + pub unsafe fn from_ptr(handle: *mut ffi::ASN1_TIME) -> Asn1Time { + Asn1Time(handle) } - fn new_with_period(period: u64) -> Result<Asn1Time, SslError> { + fn from_period(period: c_long) -> Result<Asn1Time, ErrorStack> { ffi::init(); - let handle = unsafe { - try_ssl_null!(ffi::X509_gmtime_adj(ptr::null_mut(), period as c_long)) - }; - Ok(Asn1Time::new(handle)) + unsafe { + let handle = try_ssl_null!(ffi::X509_gmtime_adj(ptr::null_mut(), period)); + Ok(Asn1Time::from_ptr(handle)) + } } /// Creates a new time on specified interval in days from now - pub fn days_from_now(days: u32) -> Result<Asn1Time, SslError> { - Asn1Time::new_with_period(days as u64 * 60 * 60 * 24) + pub fn days_from_now(days: u32) -> Result<Asn1Time, ErrorStack> { + Asn1Time::from_period(days as c_long * 60 * 60 * 24) } - /// Returns raw handle - pub unsafe fn get_handle(&self) -> *mut ffi::ASN1_TIME { - return self.handle; + /// Returns the raw handle + pub fn as_ptr(&self) -> *mut ffi::ASN1_TIME { + self.0 } } impl Drop for Asn1Time { fn drop(&mut self) { - if self.owned { - unsafe { ffi::ASN1_TIME_free(self.handle) }; - } + unsafe { ffi::ASN1_TIME_free(self.0) }; } } |