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 } 55 56 status_t 57 Err::SetTo(const std::string &msg, const ssize_t pos) { 58 SetTo(msg.c_str(), pos); 59 } 60 61 void 62 Err::Unset() { 63 delete fMsg; 64 fMsg = NULL; 65 fPos = -1; 66 } 67 68 const char* 69 Err::Msg() const { 70 return fMsg; 71 } 72 73 ssize_t 74 Err::Pos() const { 75 return fPos; 76 } 77 78 void 79 Err::SetMsg(const char *msg) { 80 if (fMsg) { 81 delete fMsg; 82 fMsg = NULL; 83 } 84 if (msg) { 85 fMsg = new(std::nothrow) char[strlen(msg)+1]; 86 if (fMsg) 87 strcpy(fMsg, msg); 88 } 89 } 90 91 void 92 Err::SetPos(ssize_t pos) { 93 fPos = pos; 94 } 95 96 97 98