diff --git a/mrw/errno.cpp b/mrw/errno.cpp
index c206ad7..be7e6ac 100644
--- a/mrw/errno.cpp
+++ b/mrw/errno.cpp
@@ -8,6 +8,9 @@
@license LGPL, see file COPYING
$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
new in release 1.8.0
@@ -19,181 +22,16 @@
#include
#include
#include
-
-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")
-};
+#include
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) {
- ErrnoMapper::const_iterator it(MAPPER.find(_errno));
- return it!=MAPPER.end() ? it->second : std::string("errno=")+_errno;
+ char error[1024];
+ return strerror_r(_errno, error, 1024) ? error : std::string("errno=")+_errno;
}
std::string mrw::Errno::string() const throw(std::bad_exception) {
- ErrnoMapper::const_iterator it(MAPPER.find(_errno));
- return it!=MAPPER.end() ? it->second : std::string("errno=")+_errno;
+ char error[1024];
+ return strerror_r(_errno, error, 1024) ? error : std::string("errno=")+_errno;
}
diff --git a/mrw/errno.hpp b/mrw/errno.hpp
index 624f9b9..c807def 100644
--- a/mrw/errno.hpp
+++ b/mrw/errno.hpp
@@ -9,6 +9,9 @@
@license LGPL, see file COPYING
$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
new in release 1.8.0
@@ -40,11 +43,6 @@ namespace mrw {
@pre #include */
class Errno {
- //............................................................... typedefs
- public:
-
- typedef std::map ErrnoMapper;
-
//................................................................ methods
public:
@@ -70,8 +68,6 @@ namespace mrw {
//.............................................................. variables
private:
- static const ErrnoMapper MAPPER;
-
int _errno;
};