barrier/base/XBase.cpp
crs f129841b38 made all getWhat() methods on exceptions consistent. they now
all use format() the same way.  also changed format() to actually
do formatting.  however, it doesn't try looking up formatting
strings by id, it just uses the fallback format string.
2002-07-25 17:52:40 +00:00

96 lines
1.2 KiB
C++

#include "XBase.h"
#include <cerrno>
#include <cstdarg>
// win32 wants a const char* argument to std::exception c'tor
#if WINDOWS_LIKE
#define STDEXCEPTARG ""
#endif
// default to no argument
#ifndef STDEXCEPTARG
#define STDEXCEPTARG
#endif
//
// XBase
//
XBase::XBase() :
exception(STDEXCEPTARG),
m_what()
{
// do nothing
}
XBase::XBase(const CString& msg) :
exception(STDEXCEPTARG),
m_what(msg)
{
// do nothing
}
XBase::~XBase()
{
// do nothing
}
const char*
XBase::what() const
{
if (m_what.empty()) {
m_what = getWhat();
}
return m_what.c_str();
}
CString
XBase::format(const char* /*id*/, const char* fmt, ...) const throw()
{
// FIXME -- lookup message string using id as an index. set
// fmt to that string if it exists.
// format
CString result;
va_list args;
va_start(args, fmt);
try {
result = CStringUtil::vformat(fmt, args);
}
catch (...) {
// ignore
}
va_end(args);
return result;
}
//
// MXErrno
//
MXErrno::MXErrno() :
m_errno(errno)
{
// do nothing
}
MXErrno::MXErrno(int err) :
m_errno(err)
{
// do nothing
}
int
MXErrno::getErrno() const
{
return m_errno;
}
const char*
MXErrno::getErrstr() const
{
return strerror(m_errno);
}