/* If it's a Windows Winsock error, that needs special handling */ #ifdef WIN32 /* Winsock error code range, per WinError.h */ if (errnum >= 10000 && errnum <= 11999) return win32_socket_strerror(errnum, buf, buflen); #endif
/* Try the platform's strerror_r(), or maybe just strerror() */
str = gnuish_strerror_r(errnum, buf, buflen);
if (str == NULL)
{
snprintf(buf, buflen, _("operating system error %d"), errnum);
str = buf;
}
return str;
}
/* *SimplewrappertoemulateGNUstrerror_rifwhattheplatformprovidesis *POSIX.Also,ifplatformlacksstrerror_raltogether,fallbacktoplain *strerror;itmightnotbeverythread-safe,buttoughluck.
*/ staticchar *
gnuish_strerror_r(int errnum, char *buf, size_t buflen)
{ #ifdef HAVE_STRERROR_R #ifdef STRERROR_R_INT /* POSIX API */ if (strerror_r(errnum, buf, buflen) == 0) return buf; return NULL; /* let caller deal with failure */ #else /* GNU API */ return strerror_r(errnum, buf, buflen); #endif #else/* !HAVE_STRERROR_R */ char *sbuf = strerror(errnum);
if (sbuf == NULL) /* can this still happen anywhere? */ return NULL; /* To minimize thread-unsafety hazard, copy into caller's buffer */
strlcpy(buf, sbuf, buflen); return buf; #endif
}
/* *Returnsasymbol(e.g."ENOENT")foranerrnocode. *ReturnsNULLifthecodeisunrecognized.
*/ staticchar *
get_errno_symbol(int errnum)
{ switch (errnum)
{ case E2BIG: return"E2BIG"; case EACCES: return"EACCES"; case EADDRINUSE: return"EADDRINUSE"; case EADDRNOTAVAIL: return"EADDRNOTAVAIL"; case EAFNOSUPPORT: return"EAFNOSUPPORT"; #ifdef EAGAIN case EAGAIN: return"EAGAIN"; #endif #ifdef EALREADY case EALREADY: return"EALREADY"; #endif case EBADF: return"EBADF"; #ifdef EBADMSG case EBADMSG: return"EBADMSG"; #endif case EBUSY: return"EBUSY"; case ECHILD: return"ECHILD"; case ECONNABORTED: return"ECONNABORTED"; case ECONNREFUSED: return"ECONNREFUSED"; case ECONNRESET: return"ECONNRESET"; case EDEADLK: return"EDEADLK"; case EDOM: return"EDOM"; case EEXIST: return"EEXIST"; case EFAULT: return"EFAULT"; case EFBIG: return"EFBIG"; case EHOSTDOWN: return"EHOSTDOWN"; case EHOSTUNREACH: return"EHOSTUNREACH"; case EIDRM: return"EIDRM"; case EINPROGRESS: return"EINPROGRESS"; case EINTR: return"EINTR"; case EINVAL: return"EINVAL"; case EIO: return"EIO"; case EISCONN: return"EISCONN"; case EISDIR: return"EISDIR"; #ifdef ELOOP case ELOOP: return"ELOOP"; #endif case EMFILE: return"EMFILE"; case EMLINK: return"EMLINK"; case EMSGSIZE: return"EMSGSIZE"; case ENAMETOOLONG: return"ENAMETOOLONG"; case ENETDOWN: return"ENETDOWN"; case ENETRESET: return"ENETRESET"; case ENETUNREACH: return"ENETUNREACH"; case ENFILE: return"ENFILE"; case ENOBUFS: return"ENOBUFS"; case ENODEV: return"ENODEV"; case ENOENT: return"ENOENT"; case ENOEXEC: return"ENOEXEC"; case ENOMEM: return"ENOMEM"; case ENOSPC: return"ENOSPC"; case ENOSYS: return"ENOSYS"; case ENOTCONN: return"ENOTCONN"; case ENOTDIR: return"ENOTDIR"; case ENOTEMPTY: return"ENOTEMPTY"; case ENOTSOCK: return"ENOTSOCK"; #ifdef ENOTSUP case ENOTSUP: return"ENOTSUP"; #endif case ENOTTY: return"ENOTTY"; case ENXIO: return"ENXIO"; #ifdefined(EOPNOTSUPP) && (!defined(ENOTSUP) || (EOPNOTSUPP != ENOTSUP)) case EOPNOTSUPP: return"EOPNOTSUPP"; #endif #ifdef EOVERFLOW case EOVERFLOW: return"EOVERFLOW"; #endif case EPERM: return"EPERM"; case EPIPE: return"EPIPE"; case EPROTONOSUPPORT: return"EPROTONOSUPPORT"; case ERANGE: return"ERANGE"; #ifdef EROFS case EROFS: return"EROFS"; #endif case ESRCH: return"ESRCH"; case ETIMEDOUT: return"ETIMEDOUT"; #ifdef ETXTBSY case ETXTBSY: return"ETXTBSY"; #endif #ifdefined(EWOULDBLOCK) && (!defined(EAGAIN) || (EWOULDBLOCK != EAGAIN)) case EWOULDBLOCK: return"EWOULDBLOCK"; #endif case EXDEV: return"EXDEV";
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.