LIEF: Library to Instrument Executable Formats Version 1.0.0
Loading...
Searching...
No Matches
errors.hpp
Go to the documentation of this file.
1/* Copyright 2021 - 2026 R. Thomas
2 * Copyright 2021 - 2026 Quarkslab
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16#ifndef LIEF_ERROR_H
17#define LIEF_ERROR_H
18#include <cstdint>
19#include <string>
21#include <LIEF/third-party/expected.hpp>
22
24enum class lief_errors : uint32_t {
29
32
36
40
45 /*
46 * When adding a new error, do not forget
47 * to update the Python bindings as well (pyErr.cpp) and Rust bindings:
48 * lief/src/error.rs
49 */
50};
51
52const char* to_string(lief_errors err);
53
55inline tl::unexpected<lief_errors> make_error_code(lief_errors e) {
56 return tl::make_unexpected(e);
57}
58
59
60namespace LIEF {
78template<typename T>
79class LIEF_MAYBE_UNUSED result : public tl::expected<T, lief_errors> {
80 public:
81 using ExpectedType = T;
82 using tl::expected<T, lief_errors>::expected;
83 result(tl::expected<T, lief_errors> e) :
84 tl::expected<T, lief_errors>::expected(std::move(e)) {}
85};
86
88template<class T>
90 return err.error();
91}
92
94template<class T>
96 return err.error();
97}
98
100struct ok_t {};
101
103inline ok_t ok() {
104 return ok_t{};
105}
106
119class LIEF_MAYBE_UNUSED ok_error_t : public result<ok_t> {
120 public:
121 using result<ok_t>::result;
122};
123
124inline bool is_ok(const ok_error_t& val) {
125 return val.has_value();
126}
127
128inline bool is_err(const ok_error_t& val) {
129 return !is_ok(val);
130}
131
132}
133
134extern template class tl::expected<LIEF::ok_t, lief_errors>;
135extern template class LIEF::result<LIEF::ok_t>;
136extern template class tl::expected<uint64_t, lief_errors>;
137extern template class LIEF::result<uint64_t>;
138extern template class tl::expected<uint32_t, lief_errors>;
139extern template class LIEF::result<uint32_t>;
140extern template class tl::expected<std::string, lief_errors>;
141extern template class LIEF::result<std::string>;
142
143#endif
Opaque structure that is used by LIEF to avoid writing result<void> f(...). Instead,...
Definition errors.hpp:119
Wrapper that contains an Object (T) or an error.
Definition errors.hpp:79
result(tl::expected< T, lief_errors > e)
Definition errors.hpp:83
T ExpectedType
Definition errors.hpp:81
#define LIEF_MAYBE_UNUSED
Definition compiler_attributes.hpp:62
lief_errors
LIEF error codes definition.
Definition errors.hpp:24
@ require_extended_version
Definition errors.hpp:42
@ file_format_error
Definition errors.hpp:37
@ data_too_large
Definition errors.hpp:41
@ read_out_of_bound
Definition errors.hpp:33
@ conversion_error
Definition errors.hpp:31
@ build_error
Definition errors.hpp:39
@ runtime_error
Definition errors.hpp:44
@ not_implemented
Definition errors.hpp:27
@ not_found
Definition errors.hpp:26
@ corrupted
Definition errors.hpp:30
@ asn1_bad_tag
Definition errors.hpp:34
@ not_supported
Definition errors.hpp:28
@ read_error
Definition errors.hpp:25
@ parsing_error
Definition errors.hpp:38
@ inconsistent
Definition errors.hpp:43
@ file_error
Definition errors.hpp:35
tl::unexpected< lief_errors > make_error_code(lief_errors e)
Create a standard error code from lief_errors.
Definition errors.hpp:55
const char * to_string(lief_errors err)
LIEF namespace.
Definition Abstract/Binary.hpp:41
bool is_ok(const ok_error_t &val)
Definition errors.hpp:124
lief_errors get_error(result< T > &err)
Get the error code associated with the result.
Definition errors.hpp:89
ok_t ok()
Return success for function with return type ok_error_t.
Definition errors.hpp:103
bool is_err(const ok_error_t &val)
Definition errors.hpp:128
lief_errors as_lief_err(result< T > &err)
Return the lief_errors when the provided result<T> is an error.
Definition errors.hpp:95
Opaque structure used by ok_error_t.
Definition errors.hpp:100