00001
00002
00003
00004
00005
00006
00007 #include "wverror.h"
00008 #include <assert.h>
00009
00010 #ifdef _WIN32
00011 #include "windows.h"
00012 #endif
00013
00014 WvError::~WvError()
00015 {
00016
00017 }
00018
00019
00020 WvString WvError::errstr() const
00021 {
00022 if (errnum == -1)
00023 {
00024 assert(!!errstring);
00025 return errstring;
00026 }
00027 else
00028 {
00029 #ifndef _WIN32
00030 return strerror(errnum);
00031 #else
00032 char msg[4096];
00033 const HMODULE module = GetModuleHandle("winsock.dll");
00034 DWORD result = FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, module, errnum, 0, msg, sizeof(msg), 0);
00035 if (result)
00036 return msg;
00037 else
00038 {
00039 DWORD e = GetLastError();
00040 return "Unknown error";
00041 }
00042 #endif
00043 }
00044 }
00045
00046
00047 void WvError::seterr(int _errnum)
00048 {
00049 if (!errnum)
00050 errnum = _errnum;
00051 }
00052
00053
00054 void WvError::seterr(WvStringParm specialerr)
00055 {
00056 if (!errnum)
00057 {
00058 errstring = specialerr;
00059 seterr(-1);
00060 }
00061 }
00062
00063
00064 void WvError::seterr(const WvError &err)
00065 {
00066 if (err.geterr() > 0)
00067 seterr(err.geterr());
00068 else if (err.geterr() < 0)
00069 seterr(err.errstr());
00070 }