/**
 * Error handling for system strategies.
 *
 * @since   0.9.4
 * @author  Martin Bravenboer <mbravenb@cs.uu.nl>
 */
module system/error

signature
  constructors
    ErrorNumber : Int -> Error

strategies

  /**
   * @type    _ -> Error
   * @since   0.9.4
   */
  get-last-error =
    !ErrorNumber(<get-errno>)

  /**
   * @see     man errno
   * @type    _ -> Int
   * @since   0.9.4
   */
  get-errno =
    prim("SSL_get_errno")

  /**
   * Print a system error message.
   *
   * @see    man perror
   * @type   String -> String
   * @since  0.9.4
   */
  perror =
    ?s; prim("SSL_perror", s)

  /**
   * Return string describing error code
   *
   * @see    man strerror
   * @type   Int -> String
   * @since  0.9.4
   */
  strerror =
    ?s; prim("SSL_strerror", s)

strategies

  EXDEV = prim("SSL_EXDEV")