µOS++ IIIe Reference 7.0.0
The third edition of µOS++, a POSIX inspired open source framework, written in C++
Loading...
Searching...
No Matches
system-error.cpp
Go to the documentation of this file.
1/*
2 * This file is part of the µOS++ distribution.
3 * (https://github.com/micro-os-plus)
4 * Copyright (c) 2016 Liviu Ionescu.
5 *
6 * Permission is hereby granted, free of charge, to any person
7 * obtaining a copy of this software and associated documentation
8 * files (the "Software"), to deal in the Software without
9 * restriction, including without limitation the rights to use,
10 * copy, modify, merge, publish, distribute, sublicense, and/or
11 * sell copies of the Software, and to permit persons to whom
12 * the Software is furnished to do so, subject to the following
13 * conditions:
14 *
15 * The above copyright notice and this permission notice shall be
16 * included in all copies or substantial portions of the Software.
17 *
18 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
19 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
20 * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
21 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
22 * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
23 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
24 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
25 * OTHER DEALINGS IN THE SOFTWARE.
26 */
27
28#include <cmsis-plus/rtos/os.h>
29
30#if defined(__EXCEPTIONS)
31#include <string>
32#include <system_error>
33#endif
34
35// ----------------------------------------------------------------------------
36
37#if defined(__clang__)
38#pragma clang diagnostic ignored "-Wc++98-compat"
39#pragma clang diagnostic ignored "-Wc++98-compat-bind-to-temporary-copy"
40#endif
41
42// ----------------------------------------------------------------------------
43
44using namespace os;
45
46// ----------------------------------------------------------------------------
47
48namespace os
49{
50 namespace estd
51 {
52 // ========================================================================
53
54#if defined(__EXCEPTIONS)
55
56 struct system_error_category : public std::error_category
57 {
58 virtual const char*
59 name () const noexcept override;
60
61 virtual std::string
62 message (int i) const override;
63
64 };
65
66 const char*
67 system_error_category::name () const noexcept
68 {
69 return "system";
70 }
71
72#pragma GCC diagnostic push
73#pragma GCC diagnostic ignored "-Wunused-parameter"
74
75 std::string
76 system_error_category::message (int i) const
77 {
78#if defined(DEBUG)
79 return std::string (strerror (i));
80#else
81 return std::string ("");
82#endif
83 }
84
85 struct cmsis_error_category : public std::error_category
86 {
87 virtual const char*
88 name () const noexcept override;
89
90 virtual std::string
91 message (int i) const override;
92 };
93
94 const char*
95 cmsis_error_category::name () const noexcept
96 {
97 return "cmsis";
98 }
99
100#pragma GCC diagnostic push
101#pragma GCC diagnostic ignored "-Wunused-parameter"
102
103 std::string
104 cmsis_error_category::message (int i) const
105 {
106#if defined(DEBUG)
107 return std::string (strerror (i));
108#else
109 return std::string ("");
110#endif
111 }
112
113#pragma GCC diagnostic pop
114
115#endif
116
117 void
118 __throw_system_error (int ev, const char* what_arg)
119 {
120#if defined(__EXCEPTIONS)
121 // error: copying parameter of type 'os::estd::system_error_category' when binding a reference to a temporary would invoke a deleted constructor in C++98 [-Werror,-Wc++98-compat-bind-to-temporary-copy]
122 throw std::system_error (std::error_code (ev, system_error_category ()),
123 what_arg);
124#else
125 trace_printf ("system_error(%d, %s)\n", ev, what_arg);
126 std::abort ();
127#endif
128 }
129
130 void
131 __throw_cmsis_error (int ev, const char* what_arg)
132 {
133#if defined(__EXCEPTIONS)
134 // error: copying parameter of type 'os::estd::cmsis_error_category' when binding a reference to a temporary would invoke a deleted constructor in C++98 [-Werror,-Wc++98-compat-bind-to-temporary-copy]
135 throw std::system_error (std::error_code (ev, cmsis_error_category ()),
136 what_arg);
137#else
138 trace_printf ("system_error(%d, %s)\n", ev, what_arg);
139 std::abort ();
140#endif
141 }
142
143 // --------------------------------------------------------------------------
144
145 } /* namespace estd */
146} /* namespace os */
147
148// ----------------------------------------------------------------------------
void __throw_system_error(int ev, const char *what_arg)
void __throw_cmsis_error(int ev, const char *what_arg)
System namespace.
Standard std namespace.
Single file µOS++ RTOS definitions.
int trace_printf(const char *format,...)