Err.cxx
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #include "Err.hxx"
00023 #include <cstdio>
00024 #include <cstring>
00025 #include <new>
00026
00027 namespace CLAM {
00028
00029
00030 Err::Err() throw()
00031 {
00032 mMsg = 0;
00033 }
00034
00035
00036 Err::Err(const char* msg) throw()
00037 {
00038 mMsg = new(std::nothrow) char[strlen(msg)+1];
00039 if (!mMsg) return;
00040 strncpy(mMsg,msg,strlen(msg)+1);
00041 }
00042
00043 Err::Err(const Err& orig) throw()
00044 {
00045 mMsg = new(std::nothrow) char[strlen(orig.what())+1];
00046 if (!mMsg) return;
00047 strncpy(mMsg,orig.what(),strlen(orig.what())+1);
00048 }
00049
00050 Err::~Err() throw()
00051 {
00052 if ( mMsg )
00053 delete [] mMsg;
00054 };
00055
00056
00057 void Err::Print(void) const throw()
00058 {
00059 fprintf(stderr,"CLAM Error: ");
00060 if (mMsg)
00061 fprintf(stderr,mMsg);
00062 else
00063 fprintf(stderr,"Unknown Error");
00064 fprintf(stderr,"\n");
00065 }
00066
00067 void Err::Embed(const std::exception &e) throw()
00068 {
00069 Embed(e.what());
00070 }
00071
00072 void Err::Embed(const char* str) throw()
00073 {
00074 static const char* separation = "\n Nested error: ";
00075 size_t msgLen = strlen(mMsg);
00076 size_t sepLen = strlen(separation);
00077 size_t strLen = strlen(str);
00078 size_t len;
00079 char* msg;
00080 len = msgLen + sepLen + strLen + 1;
00081 msg = new(std::nothrow) char[len];
00082 if (!msg) return;
00083 strcpy(msg,mMsg);
00084 strcpy(msg+msgLen,separation);
00085 strcpy(msg+msgLen+sepLen,str);
00086 delete [] mMsg;
00087 mMsg = msg;
00088 }
00089
00090 }
00091