Skip to content
Snippets Groups Projects
Select Git revision
  • 556f37168978ef807034cca2c4338714431a6fe0
  • master default
  • sbuttgereit/upstream-sbgp-extension
  • auto-lib-type
  • 0.9.x
  • gh-pages
  • openssl-v0.10.50
  • openssl-sys-v0.9.85
  • openssl-v0.10.49
  • openssl-sys-v0.9.84
  • openssl-macros-v0.1.1
  • openssl-sys-v0.9.83
  • openssl-v0.10.48
  • openssl-v0.10.47
  • openssl-sys-v0.9.82
  • openssl-v0.10.46
  • openssl-sys-v0.9.81
  • openssl-v0.10.45
  • openssl-sys-v0.9.80
  • openssl-v0.10.44
  • openssl-sys-v0.9.79
  • openssl-v0.10.43
  • openssl-sys-v0.9.78
  • openssl-sys-v0.9.77
  • openssl-v0.10.42
  • openssl-sys-v0.9.76
26 results

error.rs

Blame
  • error.rs 6.86 KiB
    //! Errors returned by OpenSSL library.
    //!
    //! OpenSSL errors are stored in an `ErrorStack`.  Most methods in the crate
    /// returns a `Result<T, ErrorStack>` type.
    //!
    //! # Examples
    //!
    //! ```
    //! use openssl::error::ErrorStack;
    //! use openssl::bn::BigNum;
    //!
    //! let an_error = BigNum::from_dec_str("Cannot parse letters");
    //! match an_error {
    //!     Ok(_)  => _,
    //!     Err(e) => println!("Parsing Error: {:?}", e),
    //! }
    //! ```
    use libc::{c_ulong, c_char, c_int};
    use std::fmt;
    use std::error;
    use std::ffi::CStr;
    use std::io;
    use std::str;
    use std::ptr;
    use std::borrow::Cow;
    
    use ffi;
    
    /// Collection of [`Error`]s from OpenSSL.
    ///
    /// [`Error`]: struct.Error.html
    #[derive(Debug, Clone)]
    pub struct ErrorStack(Vec<Error>);
    
    impl ErrorStack {
        /// Returns the contents of the OpenSSL error stack.
        pub fn get() -> ErrorStack {
            let mut vec = vec![];
            while let Some(err) = Error::get() {
                vec.push(err);
            }
            ErrorStack(vec)
        }
    }
    
    impl ErrorStack {
        /// Returns the errors in the stack.
        pub fn errors(&self) -> &[Error] {
            &self.0
        }
    }
    
    impl fmt::Display for ErrorStack {
        fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result {
            let mut first = true;
            for err in &self.0 {
                if !first {
                    fmt.write_str(", ")?;
                }
                write!(fmt, "{}", err)?;
                first = false;
            }
            Ok(())
        }
    }
    
    impl error::Error for ErrorStack {
        fn description(&self) -> &str {
            "An OpenSSL error stack"
        }