#include "netdissect-stdinc.h"
+#define ND_LONGJMP_FROM_TCHECK
#include "netdissect.h"
#include "extract.h"
billion */
ND_PRINT("%u.%09d", i, f);
-#ifdef HAVE_STRFTIME
/*
* print the time in human-readable format.
*/
if (i) {
time_t seconds = i - JAN_1970;
- struct tm *tm;
char time_buf[128];
- tm = localtime(&seconds);
- strftime(time_buf, sizeof (time_buf), "%Y/%m/%d %H:%M:%S", tm);
- ND_PRINT(" (%s)", time_buf);
+ ND_PRINT(" (%s)",
+ nd_format_time(time_buf, sizeof (time_buf), "%Y/%m/%d %H:%M:%S",
+ localtime(&seconds)));
}
-#endif
}
/*
nd_print_protocol_caps(ndo);
- ND_TCHECK_LEN(bp, 8);
-
/* Preamble Code (must be "EX") */
if (GET_U_1(bp) != 'E' || GET_U_1(bp + 1) != 'X') {
ND_PRINT(" [Preamble Code: ");
if (version == 1) {
/* ZEP v1 packet. */
- ND_TCHECK_LEN(bp, 16);
+ ND_ICHECK_U(len, <, 16);
ND_PRINT("Channel ID %u, Device ID 0x%04x, ",
GET_U_1(bp + 3), GET_BE_U_2(bp + 4));
if (GET_U_1(bp + 6))
/* ZEP v2 packet. */
if (GET_U_1(bp + 3) == 2) {
/* ZEP v2 ack. */
+ ND_ICHECK_U(len, <, 8);
seq_no = GET_BE_U_4(bp + 4);
ND_PRINT("ACK, seq# = %u", seq_no);
inner_len = 0;
len -= 8;
} else {
/* ZEP v2 data, or some other. */
- ND_TCHECK_LEN(bp, 32);
-
+ ND_ICHECK_U(len, <, 32);
ND_PRINT("Type %u, Channel ID %u, Device ID 0x%04x, ",
GET_U_1(bp + 3), GET_U_1(bp + 4),
GET_BE_U_2(bp + 5));
/* Call 802.15.4 dissector. */
ND_PRINT("\n\t");
if (ieee802_15_4_print(ndo, bp, inner_len)) {
+ ND_TCHECK_LEN(bp, len);
bp += len;
len = 0;
}
if (!ndo->ndo_suppress_default_print)
ND_DEFAULTPRINT(bp, len);
-
return;
- trunc:
- nd_print_trunc(ndo);
+invalid:
+ nd_print_invalid(ndo);
}