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; };