123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 |
- #ifdef HAVE_CONFIG_H
- #include <config.h>
- #endif
- #include "ftmacros.h"
- #include <stddef.h>
- #include <stdarg.h>
- #include <stdio.h>
- #include <string.h>
- #include <errno.h>
- #include <pcap/pcap.h>
- #include "portability.h"
- #include "fmtutils.h"
- void
- pcap_fmt_errmsg_for_errno(char *errbuf, size_t errbuflen, int errnum,
- const char *fmt, ...)
- {
- va_list ap;
- size_t msglen;
- char *p;
- size_t errbuflen_remaining;
- #if defined(HAVE_STRERROR_S)
- errno_t err;
- #elif defined(HAVE_STRERROR_R)
- int err;
- #endif
- va_start(ap, fmt);
- pcap_vsnprintf(errbuf, errbuflen, fmt, ap);
- va_end(ap);
- msglen = strlen(errbuf);
-
- if (msglen + 3 > errbuflen) {
-
- return;
- }
- p = errbuf + msglen;
- errbuflen_remaining = errbuflen - msglen;
- *p++ = ':';
- *p++ = ' ';
- *p = '\0';
- msglen += 2;
- errbuflen_remaining -= 2;
-
- #if defined(HAVE_STRERROR_S)
- err = strerror_s(p, errbuflen_remaining, errnum);
- if (err != 0) {
-
- pcap_snprintf(p, errbuflen_remaining, "Error %d", errnum);
- }
- #elif defined(HAVE_STRERROR_R)
- err = strerror_r(errnum, p, errbuflen_remaining);
- if (err == EINVAL) {
-
- pcap_snprintf(p, errbuflen_remaining, "Unknown error: %d",
- errnum);
- } else if (err == ERANGE) {
-
- pcap_snprintf(p, errbuflen_remaining,
- "Message for error %d is too long", errnum);
- }
- #else
-
- pcap_snprintf(p, errbuflen_remaining, "%s", pcap_strerror(errnum));
- #endif
- }
|