aboutsummaryrefslogtreecommitdiff
path: root/error.rs
diff options
context:
space:
mode:
authorSteven Fackler <[email protected]>2013-10-23 21:28:08 -0700
committerSteven Fackler <[email protected]>2013-10-23 21:28:08 -0700
commit7ea442be94ac1450d5d9d6c5670c10b0e7a5b05a (patch)
tree989b2707a303d40d1eb9dbf7b02364c21e360e37 /error.rs
parentSlightly better error handling (diff)
downloadrust-openssl-7ea442be94ac1450d5d9d6c5670c10b0e7a5b05a.tar.xz
rust-openssl-7ea442be94ac1450d5d9d6c5670c10b0e7a5b05a.zip
Ssl errors may return a stack
Diffstat (limited to 'error.rs')
-rw-r--r--error.rs25
1 files changed, 17 insertions, 8 deletions
diff --git a/error.rs b/error.rs
index 5e5479f8..d009b38c 100644
--- a/error.rs
+++ b/error.rs
@@ -6,6 +6,11 @@ use super::ffi;
pub enum SslError {
StreamEof,
SslSessionClosed,
+ OpenSslErrors(~[OpensslError])
+}
+
+#[deriving(ToStr)]
+pub enum OpensslError {
UnknownError {
library: u8,
function: u16,
@@ -26,14 +31,18 @@ fn get_reason(err: c_ulong) -> u16 {
}
impl SslError {
- pub fn get() -> Option<SslError> {
- match unsafe { ffi::ERR_get_error() } {
- 0 => None,
- err => Some(UnknownError {
- library: get_lib(err),
- function: get_func(err),
- reason: get_reason(err)
- })
+ pub fn get() -> SslError {
+ let mut errs = ~[];
+ loop {
+ match unsafe { ffi::ERR_get_error() } {
+ 0 => break,
+ err => errs.push(UnknownError {
+ library: get_lib(err),
+ function: get_func(err),
+ reason: get_reason(err)
+ })
+ }
}
+ OpenSslErrors(errs)
}
}