diff options
author | Egor Tensin <Egor.Tensin@gmail.com> | 2015-06-15 22:26:26 +0300 |
---|---|---|
committer | Egor Tensin <Egor.Tensin@gmail.com> | 2015-06-15 22:26:26 +0300 |
commit | e4973c13558b12397124d7c9423c5eb641140444 (patch) | |
tree | 55d53124f60bd6c8efb8c36661ba65f76d7c6eed /cxx/include/aesnixx/error.hpp | |
parent | handle block parsing errors the standard way (diff) | |
download | aes-tools-e4973c13558b12397124d7c9423c5eb641140444.tar.gz aes-tools-e4973c13558b12397124d7c9423c5eb641140444.zip |
utils/cxx/ -> cxx/
Diffstat (limited to 'cxx/include/aesnixx/error.hpp')
-rw-r--r-- | cxx/include/aesnixx/error.hpp | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/cxx/include/aesnixx/error.hpp b/cxx/include/aesnixx/error.hpp new file mode 100644 index 0000000..dd908c5 --- /dev/null +++ b/cxx/include/aesnixx/error.hpp @@ -0,0 +1,47 @@ +/** + * \file + * \author Egor Tensin <Egor.Tensin@gmail.com> + * \date 2015 + * \copyright This file is licensed under the terms of the MIT License. + * See LICENSE.txt for details. + */ + +#pragma once + +#include <aesni/all.h> + +#include <cstdlib> + +#include <stdexcept> +#include <string> +#include <vector> + +namespace aesni +{ + class ErrorDetailsThrowsInDestructor + { + public: + ErrorDetailsThrowsInDestructor() + { + aesni_initialize_error_details(get()); + } + + ~ErrorDetailsThrowsInDestructor() + { + if (aesni_is_error(aesni_get_error_code(get()))) + { + std::vector<char> msg; + msg.resize(aesni_format_error(get(), NULL, 0)); + aesni_format_error(get(), msg.data(), msg.size()); + throw std::runtime_error(std::string(msg.begin(), msg.end())); + } + } + + AesNI_ErrorDetails* get() { return &m_impl; } + + operator AesNI_ErrorDetails*() { return get(); } + + private: + AesNI_ErrorDetails m_impl; + }; +} |