Disk ARchive 2.7.16
Full featured and portable backup and archiving tool
Loading...
Searching...
No Matches
erreurs.hpp
Go to the documentation of this file.
1/*********************************************************************/
2// dar - disk archive - a backup/restoration program
3// Copyright (C) 2002-2024 Denis Corbin
4//
5// This program is free software; you can redistribute it and/or
6// modify it under the terms of the GNU General Public License
7// as published by the Free Software Foundation; either version 2
8// of the License, or (at your option) any later version.
9//
10// This program is distributed in the hope that it will be useful,
11// but WITHOUT ANY WARRANTY; without even the implied warranty of
12// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13// GNU General Public License for more details.
14//
15// You should have received a copy of the GNU General Public License
16// along with this program; if not, write to the Free Software
17// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18//
19// to contact the author, see the AUTHOR file
20/*********************************************************************/
21
25
26#ifndef ERREURS_HPP
27#define ERREURS_HPP
28
29#include "../my_config.h"
30
31#include <string>
32#include <deque>
33#include "integers.hpp"
34
35namespace libdar
36{
37
40
42 extern const char *dar_gettext(const char *);
43
45
52 {
53 public :
55 Egeneric(const std::string &source, const std::string &message);
56
58 Egeneric(const Egeneric & ref) = default;
59
61 Egeneric(Egeneric && ref) = default;
62
64 Egeneric & operator = (const Egeneric & ref) = default;
65
67 Egeneric & operator = (Egeneric && ref) noexcept = default;
68
70 virtual ~Egeneric() = default;
71
73 void stack(const std::string & passage, const std::string & message = "") { pile.push_back(niveau(passage, message)); };
74 void stack(const std::string && passage, const std::string && message = "") { pile.push_back(niveau(std::move(passage), std::move(message))); };
75
77
82 const std::string & get_message() const { return pile.front().objet; };
83
85 const std::string & get_source() const { return pile.front().lieu; };
86
88
91 const std::string & find_object(const std::string & location) const;
92
94 void prepend_message(const std::string & context);
95
97 std::string dump_str() const;
98
99 protected :
100 virtual std::string exceptionID() const = 0;
101
102 private :
103 struct niveau
104 {
105 niveau(const std::string & ou, const std::string & quoi) { lieu = ou; objet = quoi; };
106 niveau(std::string && ou, std::string && quoi) { lieu = std::move(ou); objet = std::move(quoi); };
107 niveau(const niveau & ref) = default;
108 niveau(niveau && ref) noexcept = default;
109 niveau & operator = (const niveau & ref) = default;
110 niveau & operator = (niveau && ref) noexcept = default;
111 ~niveau() = default;
112
113 std::string lieu, objet;
114 };
115
116 std::deque<niveau> pile;
117
118 static const std::string empty_string;
119 };
120
121
123
126 class Ememory : public Egeneric
127 {
128 public:
129 Ememory(const std::string &source) : Egeneric(source, dar_gettext("Lack of Memory")) {};
130 Ememory(const Ememory & ref) = default;
131 Ememory(Ememory && ref) = default;
132 Ememory & operator = (const Ememory & ref) = default;
133 Ememory & operator = (Ememory && ref) = default;
134 ~Ememory() = default;
135
136 protected:
137 Ememory(const std::string &source, const std::string & message) : Egeneric(source, message) {};
138 virtual std::string exceptionID() const override { return "MEMORY"; };
139 };
140
142
143 class Esecu_memory : public Ememory
144 {
145 public:
146 Esecu_memory(const std::string &source) : Ememory(source, dar_gettext("Lack of Secured Memory")) {};
147 Esecu_memory(const Esecu_memory & ref) = default;
148 Esecu_memory(Esecu_memory && ref) = default;
149 Esecu_memory & operator = (const Esecu_memory & ref) = default;
150 Esecu_memory & operator = (Esecu_memory && ref) = default;
151 ~Esecu_memory() = default;
152
153 protected:
154 virtual std::string exceptionID() const override { return "SECU_MEMORY"; };
155 };
156
157
158#define SRC_BUG Ebug(__FILE__, __LINE__)
159// #define XMT_BUG(exception, call) exception.stack(call, __FILE__, __LINE__)
160
162 class Ebug : public Egeneric
163 {
164 public :
165 Ebug(const std::string & file, S_I line);
166 Ebug(const Ebug & ref) = default;
167 Ebug(Ebug && ref) = default;
168 Ebug & operator = (const Ebug & ref) = default;
169 Ebug & operator = (Ebug && ref) = default;
170 ~Ebug() = default;
171
172 using Egeneric::stack; // to avoid warning with clang
173 void stack(const std::string & passage, const std::string & file, const std::string & line);
174
175 protected :
176 virtual std::string exceptionID() const override { return "BUG"; };
177 };
178
180
183 class Einfinint : public Egeneric
184 {
185 public :
186 Einfinint(const std::string & source, const std::string & message) : Egeneric(source, message) {};
187 Einfinint(const Einfinint & ref) = default;
188 Einfinint(Einfinint && ref) = default;
189 Einfinint & operator = (const Einfinint & ref) = default;
190 Einfinint & operator = (Einfinint && ref) = default;
191 ~Einfinint() = default;
192
193 protected :
194 virtual std::string exceptionID() const override { return "INFININT"; };
195 };
196
198
201 class Elimitint : public Egeneric
202 {
203 public :
204 Elimitint() : Egeneric("", dar_gettext("Cannot handle such a too large integer. Use a full version of libdar (compiled to rely on the \"infinint\" integer type) to solve this problem")) {};
205 Elimitint(const Elimitint & ref) = default;
206 Elimitint(Elimitint && ref) = default;
207 Elimitint & operator = (const Elimitint & ref) = default;
208 Elimitint & operator = (Elimitint && ref) = default;
209 ~Elimitint() = default;
210
211 protected :
212 virtual std::string exceptionID() const override { return "LIMITINT"; };
213 };
214
216
219 class Erange : public Egeneric
220 {
221 public :
222 Erange(const std::string & source, const std::string & message) : Egeneric(source, message) {};
223 Erange(const Erange & ref) = default;
224 Erange(Erange && ref) = default;
225 Erange & operator = (const Erange & ref) = default;
226 Erange & operator = (Erange && ref) = default;
227 ~Erange() = default;
228
229 protected :
230 virtual std::string exceptionID() const override { return "RANGE"; };
231 };
232
234
238 class Edeci : public Egeneric
239 {
240 public :
241 Edeci(const std::string & source, const std::string & message) : Egeneric(source, message) {};
242 Edeci(const Edeci & ref) = default;
243 Edeci(Edeci && ref) = default;
244 Edeci & operator = (const Edeci & ref) = default;
245 Edeci & operator = (Edeci && ref) = default;
246 ~Edeci() = default;
247
248 protected :
249 virtual std::string exceptionID() const override { return "DECI"; };
250 };
251
253
256 class Efeature : public Egeneric
257 {
258 public :
259 Efeature(const std::string & message) : Egeneric("", message) {};
260 Efeature(const Efeature & ref) = default;
261 Efeature(Efeature && ref) = default;
262 Efeature & operator = (const Efeature & ref) = default;
263 Efeature & operator = (Efeature && ref) = default;
264 ~Efeature() = default;
265
266 protected :
267 virtual std::string exceptionID() const override { return "UNIMPLEMENTED FEATURE"; };
268 };
269
271
274 class Ehardware : public Egeneric
275 {
276 public :
277 Ehardware(const std::string & source, const std::string & message) : Egeneric(source, message) {};
278 Ehardware(const Ehardware & ref) = default;
279 Ehardware(Ehardware && ref) = default;
280 Ehardware & operator = (const Ehardware & ref) = default;
281 Ehardware & operator = (Ehardware && ref) = default;
282 ~Ehardware() = default;
283
284 protected :
285 virtual std::string exceptionID() const override { return "HARDWARE ERROR"; };
286 };
287
289
292 class Euser_abort : public Egeneric
293 {
294 public :
295 Euser_abort(const std::string & msg) : Egeneric("",msg) {};
296 Euser_abort(const Euser_abort & ref) = default;
297 Euser_abort(Euser_abort && ref) = default;
298 Euser_abort & operator = (const Euser_abort & ref) = default;
299 Euser_abort & operator = (Euser_abort && ref) = default;
300 ~Euser_abort() = default;
301
302 protected :
303 virtual std::string exceptionID() const override { return "USER ABORTED OPERATION"; };
304 };
305
306
308
311 class Edata : public Egeneric
312 {
313 public :
314 Edata(const std::string & msg) : Egeneric("", msg) {};
315 Edata(const Edata & ref) = default;
316 Edata(Edata && ref) = default;
317 Edata & operator = (const Edata & ref) = default;
318 Edata & operator = (Edata && ref) = default;
319 ~Edata() = default;
320
321 protected :
322 virtual std::string exceptionID() const override { return "ERROR IN TREATED DATA"; };
323 };
324
326
329 class Escript : public Egeneric
330 {
331 public :
332 Escript(const std::string & source, const std::string & msg) : Egeneric(source ,msg) {};
333 Escript(const Escript & ref) = default;
334 Escript(Escript && ref) = default;
335 Escript & operator = (const Escript & ref) = default;
336 Escript & operator = (Escript && ref) = default;
337 ~Escript() = default;
338
339 protected :
340 virtual std::string exceptionID() const override { return "USER ABORTED OPERATION"; };
341 };
342
344
347 class Elibcall : public Egeneric
348 {
349 public :
350 Elibcall(const std::string & source, const std::string & msg) : Egeneric(source ,msg) {};
351 Elibcall(const Elibcall & ref) = default;
352 Elibcall(Elibcall && ref) = default;
353 Elibcall & operator = (const Elibcall & ref) = default;
354 Elibcall & operator = (Elibcall && ref) = default;
355 ~Elibcall() = default;
356
357 protected :
358 virtual std::string exceptionID() const override { return "USER ABORTED OPERATION"; };
359 };
360
362
365 class Ecompilation : public Egeneric
366 {
367 public :
368 Ecompilation(const std::string & msg) : Egeneric("" ,msg) {};
369 Ecompilation(const Ecompilation & ref) = default;
370 Ecompilation(Ecompilation && ref) = default;
371 Ecompilation & operator = (const Ecompilation & ref) = default;
372 Ecompilation & operator = (Ecompilation && ref) = default;
373 ~Ecompilation() = default;
374
375 protected :
376 virtual std::string exceptionID() const override { return "FEATURE DISABLED AT COMPILATION TIME"; };
377 };
378
379
381
383 {
384 public:
385 Ethread_cancel(bool now, U_64 x_flag) : Egeneric("", now ? dar_gettext("Thread cancellation requested, aborting as soon as possible") : dar_gettext("Thread cancellation requested, aborting as properly as possible")) { immediate = now; flag = x_flag; };
386 Ethread_cancel(const Ethread_cancel & ref) = default;
387 Ethread_cancel(Ethread_cancel && ref) = default;
388 Ethread_cancel & operator = (const Ethread_cancel & ref) = default;
389 Ethread_cancel & operator = (Ethread_cancel && ref) = default;
390 ~Ethread_cancel() = default;
391
392 bool immediate_cancel() const { return immediate; };
393 U_64 get_flag() const { return flag; };
394
395 protected:
396 virtual std::string exceptionID() const override { return "THREAD CANCELLATION REQUESTED, ABORTING"; };
397
398 private:
399 bool immediate;
400 U_64 flag;
401 };
402
404
405 class Esystem : public Egeneric
406 {
407 public:
408 enum io_error
409 {
410 io_exist, //< file already exists (write mode)
411 io_absent, //< file does not exist (read mode)
412 io_access, //< permission denied (any mode)
413 io_ro_fs //< read-only filesystem (write mode/read-write mode)
414 };
415
416 Esystem(const std::string & source, const std::string & message, io_error code);
417 Esystem(const Esystem & ref) = default;
418 Esystem(Esystem && ref) = default;
419 Esystem & operator = (const Esystem & ref) = default;
420 Esystem & operator = (Esystem && ref) = default;
421 ~Esystem() = default;
422
423 io_error get_code() const { return x_code; };
424
425 protected:
426 virtual std::string exceptionID() const override { return "SYSTEM ERROR MET"; };
427
428 private:
429 io_error x_code;
430 };
431
433
434 class Enet_auth : public Egeneric
435 {
436 public:
437 Enet_auth(const std::string & message): Egeneric("on the network", message) {};
438 Enet_auth(const Enet_auth & ref) = default;
439 Enet_auth(Enet_auth && ref) = default;
440 Enet_auth & operator = (const Enet_auth & ref) = default;
441 Enet_auth & operator = (Enet_auth && ref) = default;
442 ~Enet_auth() = default;
443
444 protected:
445 virtual std::string exceptionID() const override { return "NETWORK AUTHENTICATION ERROR"; };
446 };
447
448
450
451} // end of namespace
452
453#endif
exception used to signal a bug. A bug is triggered when reaching some code that should never be reach...
Definition erreurs.hpp:163
exception used when a requested fearture has not beed activated at compilation time
Definition erreurs.hpp:366
exception used when an error concerning the treated data has been met
Definition erreurs.hpp:312
exception used to signal convertion problem between infinint and string (decimal representation)
Definition erreurs.hpp:239
exception used when a requested feature is not (yet) implemented
Definition erreurs.hpp:257
this is the parent class of all exception classes.
Definition erreurs.hpp:52
void stack(const std::string &passage, const std::string &message="")
add more detailed couple of information to the exception
Definition erreurs.hpp:73
Egeneric(const std::string &source, const std::string &message)
the constructor
Egeneric(Egeneric &&ref)=default
move constructor
virtual ~Egeneric()=default
the destructor
const std::string & get_source() const
get the call function which has thrown this exception
Definition erreurs.hpp:85
void prepend_message(const std::string &context)
prepend error message by the given string
std::string dump_str() const
return a string result of the exception information dump
Egeneric(const Egeneric &ref)=default
copy constructor
const std::string & get_message() const
get the message explaing the nature of the exception
Definition erreurs.hpp:82
const std::string & find_object(const std::string &location) const
retrieve the objet (object) associated to a given "lieu" (location) from the stack
Egeneric & operator=(const Egeneric &ref)=default
assignment operator
exception used when hardware problem is found
Definition erreurs.hpp:275
exception used when arithmetic error is detected when operating on infinint
Definition erreurs.hpp:184
exception used to signal an error in the argument given to libdar call of the API
Definition erreurs.hpp:348
exception used when a limitint overflow is detected, the maximum value of the limitint has been excee...
Definition erreurs.hpp:202
exception used when memory has been exhausted
Definition erreurs.hpp:127
exception used to report authentication error
Definition erreurs.hpp:435
exception used to signal range error
Definition erreurs.hpp:220
exception used when error the inter-slice user command returned an error code
Definition erreurs.hpp:330
exception used when secure memory has been exhausted
Definition erreurs.hpp:144
exception used to carry system error
Definition erreurs.hpp:406
exception used when the thread libdar is running in is asked to stop
Definition erreurs.hpp:383
exception used to signal that the user has aborted the operation
Definition erreurs.hpp:293
stores a stack of generic_files writing/reading on each others
Definition pile.hpp:44
const char * dar_gettext(const char *)
a routine to change NLS domaine forth and back for inline routines
are defined here basic integer types that tend to be portable
include macro defined by the configure script and some specific additional ones
libdar namespace encapsulate all libdar symbols
Definition archive.hpp:47