xref: /haiku/src/kits/storage/sniffer/Err.cpp (revision f2ced752a08ff5d2618826bcd3ae3976c9f3e92e)
1 //----------------------------------------------------------------------
2 //  This software is part of the OpenBeOS distribution and is covered
3 //  by the OpenBeOS license.
4 //---------------------------------------------------------------------
5 /*!
6 	\file Err.cpp
7 	MIME sniffer Error class implementation
8 */
9 
10 #include <sniffer/Err.h>
11 #include <new>
12 
13 using namespace BPrivate::Storage::Sniffer;
14 
15 //------------------------------------------------------------------------------
16 // Err
17 //------------------------------------------------------------------------------
18 
19 Err::Err(const char *msg, const ssize_t pos)
20 	: fMsg(NULL)
21 	, fPos(-1)
22 {
23 	SetTo(msg, pos);
24 }
25 
26 Err::Err(const std::string &msg, const ssize_t pos)
27 	: fMsg(NULL)
28 	, fPos(-1)
29 {
30 	SetTo(msg, pos);
31 }
32 
33 Err::Err(const Err &ref)
34 	: fMsg(NULL)
35 	, fPos(-1)
36 {
37 	*this = ref;
38 }
39 
40 Err::~Err() {
41 	Unset();
42 }
43 
44 Err&
45 Err::operator=(const Err &ref) {
46 	SetTo(ref.Msg(), ref.Pos());
47 	return *this;
48 }
49 
50 status_t
51 Err::SetTo(const char *msg, const ssize_t pos) {
52 	SetMsg(msg);
53 	SetPos(pos);
54 	return B_OK;
55 }
56 
57 status_t
58 Err::SetTo(const std::string &msg, const ssize_t pos) {
59 	return SetTo(msg.c_str(), pos);
60 }
61 
62 void
63 Err::Unset() {
64 	delete fMsg;
65 	fMsg = NULL;
66 	fPos = -1;
67 }
68 
69 const char*
70 Err::Msg() const {
71 	return fMsg;
72 }
73 
74 ssize_t
75 Err::Pos() const {
76 	return fPos;
77 }
78 
79 void
80 Err::SetMsg(const char *msg) {
81 	if (fMsg) {
82 		delete fMsg;
83 		fMsg = NULL;
84 	}
85 	if (msg) {
86 		fMsg = new(std::nothrow) char[strlen(msg)+1];
87 		if (fMsg)
88 			strcpy(fMsg, msg);
89 	}
90 }
91 
92 void
93 Err::SetPos(ssize_t pos) {
94 	fPos = pos;
95 }
96 
97 
98 
99