aboutsummaryrefslogtreecommitdiff
path: root/openssl/src/asn1/mod.rs
diff options
context:
space:
mode:
Diffstat (limited to 'openssl/src/asn1/mod.rs')
-rw-r--r--openssl/src/asn1/mod.rs39
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) };
}
}