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