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