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