X-Git-Url: https://git.tcpdump.org/tcpdump/blobdiff_plain/3ad446b27ed02197769b45f1e7d07784940d8e56..refs/heads/tcpdump-4.1:/tcpdump-stdinc.h?ds=inline diff --git a/tcpdump-stdinc.h b/tcpdump-stdinc.h index 214c79cf..38c987dd 100644 --- a/tcpdump-stdinc.h +++ b/tcpdump-stdinc.h @@ -29,7 +29,7 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * - * @(#) $Header: /tcpdump/master/tcpdump/tcpdump-stdinc.h,v 1.14 2005-04-27 01:13:27 guy Exp $ (LBL) + * @(#) $Header: /tcpdump/master/tcpdump/tcpdump-stdinc.h,v 1.18 2007-11-24 18:13:33 mcr Exp $ (LBL) */ /* @@ -46,15 +46,33 @@ #include #include +#include #include "bittypes.h" #include #include #include -#include "IP6_misc.h" #include #include #include /* in wpcap's Win32/include */ +#ifndef NBBY +#define NBBY 8 +#endif + +#if !defined(__MINGW32__) && !defined(__WATCOMC__) +#undef toascii +#define isascii __isascii +#define toascii __toascii +#define stat _stat +#define open _open +#define fstat _fstat +#define read _read +#define close _close +#define O_RDONLY _O_RDONLY + +typedef short ino_t; +#endif /* __MINGW32__ */ + #ifdef __MINGW32__ #include #endif @@ -113,10 +131,43 @@ typedef char* caddr_t; #endif /* WIN32 */ -#ifdef INET6 -#include "ip6.h" +#ifndef HAVE___ATTRIBUTE__ +#define __attribute__(x) #endif +/* + * Used to declare a structure unaligned, so that the C compiler, + * if necessary, generates code that doesn't assume alignment. + * This is required because there is no guarantee that the packet + * data we get from libpcap/WinPcap is properly aligned. + * + * This assumes that, for all compilers that support __attribute__: + * + * 1) they support __attribute__((packed)); + * + * 2) for all instruction set architectures requiring strict + * alignment, declaring a structure with that attribute + * causes the compiler to generate code that handles + * misaligned 2-byte, 4-byte, and 8-byte integral + * quantities. + * + * It does not (yet) handle compilers where you can get the compiler + * to generate code of that sort by some other means. + * + * This is required in order to, for example, keep the compiler from + * generating, for + * + * if (bp->bp_htype == 1 && bp->bp_hlen == 6 && bp->bp_op == BOOTPREQUEST) { + * + * in print-bootp.c, code that loads the first 4-byte word of a + * "struct bootp", masking out the bp_hops field, and comparing the result + * against 0x01010600. + * + * Note: this also requires that padding be put into the structure, + * at least for compilers where it's implemented as __attribute__((packed)). + */ +#define UNALIGNED __attribute__((packed)) + #if defined(WIN32) || defined(MSDOS) #define FOPEN_READ_TXT "rt" #define FOPEN_READ_BIN "rb" @@ -129,21 +180,21 @@ typedef char* caddr_t; #define FOPEN_WRITE_BIN FOPEN_WRITE_TXT #endif -#if defined(__GNUC__) && defined(__i386__) && !defined(__ntohl) +#if defined(__GNUC__) && defined(__i386__) && !defined(__ntohl) #undef ntohl #undef ntohs #undef htonl #undef htons - extern __inline__ unsigned long __ntohl (unsigned long x); - extern __inline__ unsigned short __ntohs (unsigned short x); + static __inline__ unsigned long __ntohl (unsigned long x); + static __inline__ unsigned short __ntohs (unsigned short x); #define ntohl(x) __ntohl(x) #define ntohs(x) __ntohs(x) #define htonl(x) __ntohl(x) #define htons(x) __ntohs(x) - extern __inline__ unsigned long __ntohl (unsigned long x) + static __inline__ unsigned long __ntohl (unsigned long x) { __asm__ ("xchgb %b0, %h0\n\t" /* swap lower bytes */ "rorl $16, %0\n\t" /* swap words */ @@ -152,7 +203,7 @@ typedef char* caddr_t; return (x); } - extern __inline__ unsigned short __ntohs (unsigned short x) + static __inline__ unsigned short __ntohs (unsigned short x) { __asm__ ("xchgb %b0, %h0" /* swap bytes */ : "=q" (x) : "0" (x)); @@ -164,4 +215,12 @@ typedef char* caddr_t; #define INET_ADDRSTRLEN 16 #endif +#ifndef TRUE +#define TRUE 1 +#endif + +#ifndef FALSE +#define FALSE 0 +#endif + #endif /* tcpdump_stdinc_h */