X-Git-Url: https://git.tcpdump.org/tcpdump/blobdiff_plain/729a57f75a9c97fecc9ba5b4d7762dd89c797748..a63600a1fc28dbc7ae7ce9f996829c49a25fb33c:/extract.h diff --git a/extract.h b/extract.h index dfb21f69..d7d803df 100644 --- a/extract.h +++ b/extract.h @@ -37,6 +37,7 @@ */ #include "funcattrs.h" #include "netdissect.h" +#include "diag-control.h" /* * If we have versions of GCC or Clang that support an __attribute__ @@ -148,7 +149,7 @@ EXTRACT_IPV4_TO_HOST_ORDER(const void *p) * cast the pointer to point to one of those, and fetch through it; * the GCC manual doesn't appear to explicitly say that * __attribute__((packed)) causes the compiler to generate unaligned-safe - * code, but it apppears to do so. + * code, but it appears to do so. * * We do this in case the compiler can generate code using those * instructions to do an unaligned load and pass stuff to "ntohs()" or @@ -575,19 +576,13 @@ EXTRACT_IPV4_TO_NETWORK_ORDER(const void *p) #define ND_TTEST_16(p) ND_TTEST_LEN((p), 16) #define ND_TCHECK_16(p) ND_TCHECK_LEN((p), 16) -static inline NORETURN void -nd_trunc(netdissect_options *ndo) -{ - longjmp(ndo->ndo_truncated, 1); -} - /* get_u_1 and get_s_1 */ static inline uint8_t get_u_1(netdissect_options *ndo, const u_char *p) { if (!ND_TTEST_1(p)) - nd_trunc(ndo); + nd_trunc_longjmp(ndo); return EXTRACT_U_1(p); } @@ -595,7 +590,7 @@ static inline int8_t get_s_1(netdissect_options *ndo, const u_char *p) { if (!ND_TTEST_1(p)) - nd_trunc(ndo); + nd_trunc_longjmp(ndo); return EXTRACT_S_1(p); } @@ -605,7 +600,7 @@ static inline uint16_t get_be_u_2(netdissect_options *ndo, const u_char *p) { if (!ND_TTEST_2(p)) - nd_trunc(ndo); + nd_trunc_longjmp(ndo); return EXTRACT_BE_U_2(p); } @@ -613,7 +608,7 @@ static inline uint32_t get_be_u_3(netdissect_options *ndo, const u_char *p) { if (!ND_TTEST_3(p)) - nd_trunc(ndo); + nd_trunc_longjmp(ndo); return EXTRACT_BE_U_3(p); } @@ -621,7 +616,7 @@ static inline uint32_t get_be_u_4(netdissect_options *ndo, const u_char *p) { if (!ND_TTEST_4(p)) - nd_trunc(ndo); + nd_trunc_longjmp(ndo); return EXTRACT_BE_U_4(p); } @@ -629,7 +624,7 @@ static inline uint64_t get_be_u_5(netdissect_options *ndo, const u_char *p) { if (!ND_TTEST_5(p)) - nd_trunc(ndo); + nd_trunc_longjmp(ndo); return EXTRACT_BE_U_5(p); } @@ -637,7 +632,7 @@ static inline uint64_t get_be_u_6(netdissect_options *ndo, const u_char *p) { if (!ND_TTEST_6(p)) - nd_trunc(ndo); + nd_trunc_longjmp(ndo); return EXTRACT_BE_U_6(p); } @@ -645,7 +640,7 @@ static inline uint64_t get_be_u_7(netdissect_options *ndo, const u_char *p) { if (!ND_TTEST_7(p)) - nd_trunc(ndo); + nd_trunc_longjmp(ndo); return EXTRACT_BE_U_7(p); } @@ -653,7 +648,7 @@ static inline uint64_t get_be_u_8(netdissect_options *ndo, const u_char *p) { if (!ND_TTEST_8(p)) - nd_trunc(ndo); + nd_trunc_longjmp(ndo); return EXTRACT_BE_U_8(p); } @@ -663,7 +658,7 @@ static inline int16_t get_be_s_2(netdissect_options *ndo, const u_char *p) { if (!ND_TTEST_2(p)) - nd_trunc(ndo); + nd_trunc_longjmp(ndo); return EXTRACT_BE_S_2(p); } @@ -671,7 +666,7 @@ static inline int32_t get_be_s_3(netdissect_options *ndo, const u_char *p) { if (!ND_TTEST_3(p)) - nd_trunc(ndo); + nd_trunc_longjmp(ndo); return EXTRACT_BE_S_3(p); } @@ -679,7 +674,7 @@ static inline int32_t get_be_s_4(netdissect_options *ndo, const u_char *p) { if (!ND_TTEST_4(p)) - nd_trunc(ndo); + nd_trunc_longjmp(ndo); return EXTRACT_BE_S_4(p); } @@ -687,7 +682,7 @@ static inline int64_t get_be_s_5(netdissect_options *ndo, const u_char *p) { if (!ND_TTEST_5(p)) - nd_trunc(ndo); + nd_trunc_longjmp(ndo); return EXTRACT_BE_S_5(p); } @@ -695,7 +690,7 @@ static inline int64_t get_be_s_6(netdissect_options *ndo, const u_char *p) { if (!ND_TTEST_6(p)) - nd_trunc(ndo); + nd_trunc_longjmp(ndo); return EXTRACT_BE_S_6(p); } @@ -703,7 +698,7 @@ static inline int64_t get_be_s_7(netdissect_options *ndo, const u_char *p) { if (!ND_TTEST_7(p)) - nd_trunc(ndo); + nd_trunc_longjmp(ndo); return EXTRACT_BE_S_7(p); } @@ -711,7 +706,7 @@ static inline int64_t get_be_s_8(netdissect_options *ndo, const u_char *p) { if (!ND_TTEST_8(p)) - nd_trunc(ndo); + nd_trunc_longjmp(ndo); return EXTRACT_BE_S_8(p); } @@ -721,7 +716,7 @@ static inline uint16_t get_he_u_2(netdissect_options *ndo, const u_char *p) { if (!ND_TTEST_2(p)) - nd_trunc(ndo); + nd_trunc_longjmp(ndo); return EXTRACT_HE_U_2(p); } @@ -729,7 +724,7 @@ static inline uint32_t get_he_u_4(netdissect_options *ndo, const u_char *p) { if (!ND_TTEST_4(p)) - nd_trunc(ndo); + nd_trunc_longjmp(ndo); return EXTRACT_HE_U_4(p); } @@ -739,7 +734,7 @@ static inline int16_t get_he_s_2(netdissect_options *ndo, const u_char *p) { if (!ND_TTEST_2(p)) - nd_trunc(ndo); + nd_trunc_longjmp(ndo); return EXTRACT_HE_S_2(p); } @@ -747,7 +742,7 @@ static inline int32_t get_he_s_4(netdissect_options *ndo, const u_char *p) { if (!ND_TTEST_4(p)) - nd_trunc(ndo); + nd_trunc_longjmp(ndo); return EXTRACT_HE_S_4(p); } @@ -757,7 +752,7 @@ static inline uint16_t get_le_u_2(netdissect_options *ndo, const u_char *p) { if (!ND_TTEST_2(p)) - nd_trunc(ndo); + nd_trunc_longjmp(ndo); return EXTRACT_LE_U_2(p); } @@ -765,7 +760,7 @@ static inline uint32_t get_le_u_3(netdissect_options *ndo, const u_char *p) { if (!ND_TTEST_3(p)) - nd_trunc(ndo); + nd_trunc_longjmp(ndo); return EXTRACT_LE_U_3(p); } @@ -773,7 +768,7 @@ static inline uint32_t get_le_u_4(netdissect_options *ndo, const u_char *p) { if (!ND_TTEST_4(p)) - nd_trunc(ndo); + nd_trunc_longjmp(ndo); return EXTRACT_LE_U_4(p); } @@ -781,7 +776,7 @@ static inline uint64_t get_le_u_5(netdissect_options *ndo, const u_char *p) { if (!ND_TTEST_5(p)) - nd_trunc(ndo); + nd_trunc_longjmp(ndo); return EXTRACT_LE_U_5(p); } @@ -789,7 +784,7 @@ static inline uint64_t get_le_u_6(netdissect_options *ndo, const u_char *p) { if (!ND_TTEST_6(p)) - nd_trunc(ndo); + nd_trunc_longjmp(ndo); return EXTRACT_LE_U_6(p); } @@ -797,7 +792,7 @@ static inline uint64_t get_le_u_7(netdissect_options *ndo, const u_char *p) { if (!ND_TTEST_7(p)) - nd_trunc(ndo); + nd_trunc_longjmp(ndo); return EXTRACT_LE_U_7(p); } @@ -805,7 +800,7 @@ static inline uint64_t get_le_u_8(netdissect_options *ndo, const u_char *p) { if (!ND_TTEST_8(p)) - nd_trunc(ndo); + nd_trunc_longjmp(ndo); return EXTRACT_LE_U_8(p); } @@ -815,7 +810,7 @@ static inline int16_t get_le_s_2(netdissect_options *ndo, const u_char *p) { if (!ND_TTEST_2(p)) - nd_trunc(ndo); + nd_trunc_longjmp(ndo); return EXTRACT_LE_S_2(p); } @@ -823,7 +818,7 @@ static inline int32_t get_le_s_3(netdissect_options *ndo, const u_char *p) { if (!ND_TTEST_3(p)) - nd_trunc(ndo); + nd_trunc_longjmp(ndo); return EXTRACT_LE_S_3(p); } @@ -831,7 +826,7 @@ static inline int32_t get_le_s_4(netdissect_options *ndo, const u_char *p) { if (!ND_TTEST_4(p)) - nd_trunc(ndo); + nd_trunc_longjmp(ndo); return EXTRACT_LE_S_4(p); } @@ -839,7 +834,7 @@ static inline int64_t get_le_s_8(netdissect_options *ndo, const u_char *p) { if (!ND_TTEST_8(p)) - nd_trunc(ndo); + nd_trunc_longjmp(ndo); return EXTRACT_LE_S_8(p); } @@ -849,7 +844,7 @@ static inline uint32_t get_ipv4_to_host_order(netdissect_options *ndo, const u_char *p) { if (!ND_TTEST_4(p)) - nd_trunc(ndo); + nd_trunc_longjmp(ndo); return EXTRACT_IPV4_TO_HOST_ORDER(p); } @@ -857,7 +852,7 @@ static inline uint32_t get_ipv4_to_network_order(netdissect_options *ndo, const u_char *p) { if (!ND_TTEST_4(p)) - nd_trunc(ndo); + nd_trunc_longjmp(ndo); return EXTRACT_IPV4_TO_NETWORK_ORDER(p); } @@ -865,7 +860,7 @@ static inline void get_cpy_bytes(netdissect_options *ndo, u_char *dst, const u_char *p, size_t len) { if (!ND_TTEST_LEN(p, len)) - nd_trunc(ndo); + nd_trunc_longjmp(ndo); UNALIGNED_MEMCPY(dst, p, len); }