Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | File List | Namespace Members | Class Members | File Members | Related Pages

wverror.cc

Go to the documentation of this file.
00001 /*
00002  * Worldvisions Weaver Software:
00003  *   Copyright (C) 1997-2002 Net Integration Technologies, Inc.
00004  * 
00005  * A class for managing error numbers and strings.  See wverror.h.
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     // nothing special
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 }

Generated on Sat Feb 21 21:05:27 2004 for WvStreams by doxygen 1.3.5