I'm so stupid, there's strerror for mapping errno to a string...
This commit is contained in:
178
mrw/errno.cpp
178
mrw/errno.cpp
@@ -8,6 +8,9 @@
|
|||||||
@license LGPL, see file <a href="license.html">COPYING</a>
|
@license LGPL, see file <a href="license.html">COPYING</a>
|
||||||
|
|
||||||
$Log$
|
$Log$
|
||||||
|
Revision 1.2 2005/02/18 15:53:07 marc
|
||||||
|
I'm so stupid, there's strerror for mapping errno to a string...
|
||||||
|
|
||||||
Revision 1.1 2005/02/08 12:30:22 marc
|
Revision 1.1 2005/02/08 12:30:22 marc
|
||||||
new in release 1.8.0
|
new in release 1.8.0
|
||||||
|
|
||||||
@@ -19,181 +22,16 @@
|
|||||||
#include <mrw/errno.hpp>
|
#include <mrw/errno.hpp>
|
||||||
#include <mrw/string.hpp>
|
#include <mrw/string.hpp>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
|
#include <string.h>
|
||||||
static const mrw::Errno::ErrnoMapper::value_type AUX_MAP[] = {
|
|
||||||
std::make_pair(E2BIG,
|
|
||||||
"E2BIG: Arg list too long"),
|
|
||||||
std::make_pair(EACCES,
|
|
||||||
"EACCES: Permission denied"),
|
|
||||||
std::make_pair(EADDRINUSE,
|
|
||||||
"EADDRINUSE: Address in use"),
|
|
||||||
std::make_pair(EADDRNOTAVAIL,
|
|
||||||
"EADDRNOTAVAIL: Address not available"),
|
|
||||||
std::make_pair(EAFNOSUPPORT,
|
|
||||||
"EAFNOSUPPORT: Address family not supported"),
|
|
||||||
std::make_pair(EWOULDBLOCK,
|
|
||||||
"EWOULDBLOCK: Operation would block"),
|
|
||||||
std::make_pair(EAGAIN,
|
|
||||||
"EAGAIN: Resource temporarily unavailable"),
|
|
||||||
std::make_pair(EALREADY,
|
|
||||||
"EALREADY: Connection already in progress"),
|
|
||||||
std::make_pair(EBADF,
|
|
||||||
"EBADF: Bad file descriptor"),
|
|
||||||
std::make_pair(EBADMSG,
|
|
||||||
"EBADMSG: Bad message"),
|
|
||||||
std::make_pair(EBUSY,
|
|
||||||
"EBUSY: Resource busy"),
|
|
||||||
std::make_pair(ECANCELED,
|
|
||||||
"ECANCELED: Operation canceled"),
|
|
||||||
std::make_pair(ECHILD,
|
|
||||||
"ECHILD: No child processes"),
|
|
||||||
std::make_pair(ECONNABORTED,
|
|
||||||
"ECONNABORTED: Connection aborted"),
|
|
||||||
std::make_pair(ECONNREFUSED,
|
|
||||||
"ECONNREFUSED: Connection refused"),
|
|
||||||
std::make_pair(ECONNRESET,
|
|
||||||
"ECONNRESET: Connection reset"),
|
|
||||||
std::make_pair(EDEADLK,
|
|
||||||
"EDEADLK: Resource deadlock avoided"),
|
|
||||||
std::make_pair(EDESTADDRREQ,
|
|
||||||
"EDESTADDRREQ: Destination address required"),
|
|
||||||
std::make_pair(EDOM,
|
|
||||||
"EDOM: Domain error"),
|
|
||||||
std::make_pair(EDQUOT,
|
|
||||||
"EDQUOT: Reserved"),
|
|
||||||
std::make_pair(EEXIST,
|
|
||||||
"EEXIST: File exists"),
|
|
||||||
std::make_pair(EFAULT,
|
|
||||||
"EFAULT: Bad address"),
|
|
||||||
std::make_pair(EFBIG,
|
|
||||||
"EFBIG: File too large"),
|
|
||||||
std::make_pair(EHOSTUNREACH,
|
|
||||||
"EHOSTUNREACH: Host is unreachable"),
|
|
||||||
std::make_pair(EIDRM,
|
|
||||||
"EIDRM: Identifier removed"),
|
|
||||||
std::make_pair(EILSEQ,
|
|
||||||
"EILSEQ: Illegal byte sequence"),
|
|
||||||
std::make_pair(EINPROGRESS,
|
|
||||||
"EINPROGRESS: Operation in progress"),
|
|
||||||
std::make_pair(EINTR,
|
|
||||||
"EINTR: Interrupted function call"),
|
|
||||||
std::make_pair(EINVAL,
|
|
||||||
"EINVAL: Invalid argument"),
|
|
||||||
std::make_pair(EIO,
|
|
||||||
"EIO Input:/output error"),
|
|
||||||
std::make_pair(EISCONN,
|
|
||||||
"EISCONN: Socket is connected"),
|
|
||||||
std::make_pair(EISDIR,
|
|
||||||
"EISDIR: Is a directory"),
|
|
||||||
std::make_pair(ELOOP,
|
|
||||||
"ELOOP: Too many levels of symbolic links"),
|
|
||||||
std::make_pair(EMFILE,
|
|
||||||
"EMFILE: Too many open files"),
|
|
||||||
std::make_pair(EMLINK,
|
|
||||||
"EMLINK: Too many links"),
|
|
||||||
std::make_pair(EMSGSIZE,
|
|
||||||
"EMSGSIZE: Inappropriate message buffer length"),
|
|
||||||
std::make_pair(EMULTIHOP,
|
|
||||||
"EMULTIHOP: Reserved"),
|
|
||||||
std::make_pair(ENAMETOOLONG,
|
|
||||||
"ENAMETOOLONG: Filename too long"),
|
|
||||||
std::make_pair(ENETDOWN,
|
|
||||||
"ENETDOWN: Network is down"),
|
|
||||||
std::make_pair(ENETRESET,
|
|
||||||
"ENETRESET: Connection aborted by network"),
|
|
||||||
std::make_pair(ENETUNREACH,
|
|
||||||
"ENETUNREACH: Network unreachable"),
|
|
||||||
std::make_pair(ENFILE,
|
|
||||||
"ENFILE: Too many open files in system"),
|
|
||||||
std::make_pair(ENOBUFS,
|
|
||||||
"ENOBUFS: No buffer space available"),
|
|
||||||
std::make_pair(ENODATA,
|
|
||||||
"ENODATA: No message is available on the STREAM"
|
|
||||||
" head read queue"),
|
|
||||||
std::make_pair(ENODEV,
|
|
||||||
"ENODEV: No such device"),
|
|
||||||
std::make_pair(ENOENT,
|
|
||||||
"ENOENT: No such file or directory"),
|
|
||||||
std::make_pair(ENOEXEC,
|
|
||||||
"ENOEXEC: Exec format error"),
|
|
||||||
std::make_pair(ENOLCK,
|
|
||||||
"ENOLCK: No locks available"),
|
|
||||||
std::make_pair(ENOLINK,
|
|
||||||
"ENOLINK: Reserved"),
|
|
||||||
std::make_pair(ENOMEM,
|
|
||||||
"ENOMEM: Not enough space"),
|
|
||||||
std::make_pair(ENOMSG,
|
|
||||||
"ENOMSG: No message of the desired type"),
|
|
||||||
std::make_pair(ENOPROTOOPT,
|
|
||||||
"ENOPROTOOPT: Protocol not available"),
|
|
||||||
std::make_pair(ENOSPC,
|
|
||||||
"ENOSPC: No space left on device"),
|
|
||||||
std::make_pair(ENOSR,
|
|
||||||
"ENOSR: No STREAM resources"),
|
|
||||||
std::make_pair(ENOSTR,
|
|
||||||
"ENOSTR: Not a STREAM"),
|
|
||||||
std::make_pair(ENOSYS,
|
|
||||||
"ENOSYS: Function not implemented"),
|
|
||||||
std::make_pair(ENOTCONN,
|
|
||||||
"ENOTCONN: The socket is not connected"),
|
|
||||||
std::make_pair(ENOTDIR,
|
|
||||||
"ENOTDIR: Not a directory"),
|
|
||||||
std::make_pair(ENOTEMPTY,
|
|
||||||
"ENOTEMPTY: Directory not empty"),
|
|
||||||
std::make_pair(ENOTSOCK,
|
|
||||||
"ENOTSOCK: Not a socket"),
|
|
||||||
std::make_pair(ENOTSUP,
|
|
||||||
"ENOTSUP: Not supported"),
|
|
||||||
std::make_pair(ENOTTY,
|
|
||||||
"ENOTTY: Inappropriate I/O control operation"),
|
|
||||||
std::make_pair(ENXIO,
|
|
||||||
"ENXIO: No such device or address"),
|
|
||||||
std::make_pair(EOPNOTSUPP,
|
|
||||||
"EOPNOTSUPP: Operation not supported on socket"),
|
|
||||||
std::make_pair(EOVERFLOW,
|
|
||||||
"EOVERFLOW: Value too large to be stored in data type"),
|
|
||||||
std::make_pair(EPERM,
|
|
||||||
"EPERM: Operation not permitted"),
|
|
||||||
std::make_pair(EPIPE,
|
|
||||||
"EPIPE: Broken pipe"),
|
|
||||||
std::make_pair(EPROTO,
|
|
||||||
"EPROTO: Protocol error"),
|
|
||||||
std::make_pair(EPROTONOSUPPORT,
|
|
||||||
"EPROTONOSUPPORT: Protocol not supported"),
|
|
||||||
std::make_pair(EPROTOTYPE,
|
|
||||||
"EPROTOTYPE: Protocol wrong type for socket"),
|
|
||||||
std::make_pair(ERANGE,
|
|
||||||
"ERANGE: Result too large"),
|
|
||||||
std::make_pair(EROFS,
|
|
||||||
"EROFS Read:-only file system"),
|
|
||||||
std::make_pair(ESPIPE,
|
|
||||||
"ESPIPE: Invalid seek"),
|
|
||||||
std::make_pair(ESRCH,
|
|
||||||
"ESRCH: No such process"),
|
|
||||||
std::make_pair(ESTALE,
|
|
||||||
"ESTALE: Reserved"),
|
|
||||||
std::make_pair(ETIME,
|
|
||||||
"ETIME: STREAM ioctl() timeout"),
|
|
||||||
std::make_pair(ETIMEDOUT,
|
|
||||||
"ETIMEDOUT: Operation timed out"),
|
|
||||||
std::make_pair(ETXTBSY,
|
|
||||||
"ETXTBSY: Test file busy"),
|
|
||||||
std::make_pair(EXDEV,
|
|
||||||
"EXDEV: Improper link")
|
|
||||||
};
|
|
||||||
|
|
||||||
mrw::Errno::Errno() throw(): _errno(errno) {}
|
mrw::Errno::Errno() throw(): _errno(errno) {}
|
||||||
|
|
||||||
const mrw::Errno::ErrnoMapper
|
|
||||||
mrw::Errno::MAPPER(AUX_MAP,
|
|
||||||
AUX_MAP+sizeof(AUX_MAP)/sizeof(ErrnoMapper::value_type));
|
|
||||||
|
|
||||||
mrw::Errno::operator std::string() const throw(std::bad_exception) {
|
mrw::Errno::operator std::string() const throw(std::bad_exception) {
|
||||||
ErrnoMapper::const_iterator it(MAPPER.find(_errno));
|
char error[1024];
|
||||||
return it!=MAPPER.end() ? it->second : std::string("errno=")+_errno;
|
return strerror_r(_errno, error, 1024) ? error : std::string("errno=")+_errno;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string mrw::Errno::string() const throw(std::bad_exception) {
|
std::string mrw::Errno::string() const throw(std::bad_exception) {
|
||||||
ErrnoMapper::const_iterator it(MAPPER.find(_errno));
|
char error[1024];
|
||||||
return it!=MAPPER.end() ? it->second : std::string("errno=")+_errno;
|
return strerror_r(_errno, error, 1024) ? error : std::string("errno=")+_errno;
|
||||||
}
|
}
|
||||||
|
@@ -9,6 +9,9 @@
|
|||||||
@license LGPL, see file <a href="license.html">COPYING</a>
|
@license LGPL, see file <a href="license.html">COPYING</a>
|
||||||
|
|
||||||
$Log$
|
$Log$
|
||||||
|
Revision 1.2 2005/02/18 15:53:07 marc
|
||||||
|
I'm so stupid, there's strerror for mapping errno to a string...
|
||||||
|
|
||||||
Revision 1.1 2005/02/08 12:30:22 marc
|
Revision 1.1 2005/02/08 12:30:22 marc
|
||||||
new in release 1.8.0
|
new in release 1.8.0
|
||||||
|
|
||||||
@@ -40,11 +43,6 @@ namespace mrw {
|
|||||||
@pre #include <mrw/errno.hpp> */
|
@pre #include <mrw/errno.hpp> */
|
||||||
class Errno {
|
class Errno {
|
||||||
|
|
||||||
//............................................................... typedefs
|
|
||||||
public:
|
|
||||||
|
|
||||||
typedef std::map<int, std::string> ErrnoMapper;
|
|
||||||
|
|
||||||
//................................................................ methods
|
//................................................................ methods
|
||||||
public:
|
public:
|
||||||
|
|
||||||
@@ -70,8 +68,6 @@ namespace mrw {
|
|||||||
//.............................................................. variables
|
//.............................................................. variables
|
||||||
private:
|
private:
|
||||||
|
|
||||||
static const ErrnoMapper MAPPER;
|
|
||||||
|
|
||||||
int _errno;
|
int _errno;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
Reference in New Issue
Block a user