12949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* 22949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Copyright (c) 2002 - 2003 32949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * NetGroup, Politecnico di Torino (Italy) 42949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * All rights reserved. 52949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * 62949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Redistribution and use in source and binary forms, with or without 72949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * modification, are permitted provided that the following conditions 82949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * are met: 92949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * 102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * 1. Redistributions of source code must retain the above copyright 112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * notice, this list of conditions and the following disclaimer. 122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * 2. Redistributions in binary form must reproduce the above copyright 132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * notice, this list of conditions and the following disclaimer in the 142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * documentation and/or other materials provided with the distribution. 152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * 3. Neither the name of the Politecnico di Torino nor the names of its 162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * contributors may be used to endorse or promote products derived from 172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * this software without specific prior written permission. 182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * 192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * 312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * 3253f17a9db278d33517d9888dd77848f554522a38JP Abgrall * @(#) $Header: /tcpdump/master/tcpdump/tcpdump-stdinc.h,v 1.18 2007-11-24 18:13:33 mcr Exp $ (LBL) 332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* 362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Include the appropriate OS header files on Windows and various flavors 372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * of UNIX, and also define some additional items and include various 382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * non-OS header files on Windows, and; this isolates most of the platform 392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * differences to this one file. 402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifndef tcpdump_stdinc_h 432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define tcpdump_stdinc_h 442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifdef WIN32 462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include <stdio.h> 482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include <winsock2.h> 492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include <Ws2tcpip.h> 502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include "bittypes.h" 512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include <ctype.h> 522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include <time.h> 532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include <io.h> 542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include <fcntl.h> 552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include <sys/types.h> 562949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include <net/netdb.h> /* in wpcap's Win32/include */ 572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 5853f17a9db278d33517d9888dd77848f554522a38JP Abgrall#ifndef NBBY 5953f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define NBBY 8 6053f17a9db278d33517d9888dd77848f554522a38JP Abgrall#endif 6153f17a9db278d33517d9888dd77848f554522a38JP Abgrall 622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#if !defined(__MINGW32__) && !defined(__WATCOMC__) 632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define stat _stat 642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define open _open 652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define fstat _fstat 662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define read _read 672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define close _close 682949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define O_RDONLY _O_RDONLY 692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif /* __MINGW32__ */ 702949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 712949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifdef __MINGW32__ 722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include <stdint.h> 732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif 742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 752949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* Protos for missing/x.c functions (ideally <missing/addrinfo.h> 762949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * should be used, but it clashes with <ws2tcpip.h>). 772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 782949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectextern const char *inet_ntop (int, const void *, char *, size_t); 792949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectextern int inet_pton (int, const char *, void *); 802949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectextern int inet_aton (const char *cp, struct in_addr *addr); 812949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 8253f17a9db278d33517d9888dd77848f554522a38JP Abgrall/* 8353f17a9db278d33517d9888dd77848f554522a38JP Abgrall * With MSVC, for C, __inline is used to make a function an inline. 8453f17a9db278d33517d9888dd77848f554522a38JP Abgrall */ 8553f17a9db278d33517d9888dd77848f554522a38JP Abgrall#ifdef _MSC_VER 8653f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define inline __inline 872949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif 882949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 8953f17a9db278d33517d9888dd77848f554522a38JP Abgrall#ifndef INET6_ADDRSTRLEN 9053f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define INET6_ADDRSTRLEN 46 912949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif 922949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 932949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifndef caddr_t 942949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projecttypedef char* caddr_t; 952949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif /* caddr_t */ 962949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 972949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define MAXHOSTNAMELEN 64 982949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define NI_MAXHOST 1025 992949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define snprintf _snprintf 1002949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define vsnprintf _vsnprintf 1012949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define RETSIGTYPE void 1022949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 1032949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#else /* WIN32 */ 1042949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 1052949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include <ctype.h> 1062949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include <unistd.h> 1072949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include <netdb.h> 1082949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#if HAVE_INTTYPES_H 1092949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include <inttypes.h> 1102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#else 1112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#if HAVE_STDINT_H 1122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include <stdint.h> 1132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif 1142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif 1152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifdef HAVE_SYS_BITYPES_H 1162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include <sys/bitypes.h> 1172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif 1182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include <sys/param.h> 1192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include <sys/types.h> /* concession to AIX */ 1202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include <sys/time.h> 1212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include <sys/socket.h> 1222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include <netinet/in.h> 1232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 1242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifdef TIME_WITH_SYS_TIME 1252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include <time.h> 1262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif 1272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 1282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include <arpa/inet.h> 1292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 1307830bfb3e58b8d9ba85d275666cbd3c0cc32b56cJP Abgrall#ifndef NBBY 1317830bfb3e58b8d9ba85d275666cbd3c0cc32b56cJP Abgrall#define NBBY 8 1327830bfb3e58b8d9ba85d275666cbd3c0cc32b56cJP Abgrall#endif 1337830bfb3e58b8d9ba85d275666cbd3c0cc32b56cJP Abgrall 1347830bfb3e58b8d9ba85d275666cbd3c0cc32b56cJP Abgrall/* Doesn't exist on Android. */ 1357830bfb3e58b8d9ba85d275666cbd3c0cc32b56cJP Abgrall#define setprotoent(...) 1367830bfb3e58b8d9ba85d275666cbd3c0cc32b56cJP Abgrall#define endprotoent(...) 1377830bfb3e58b8d9ba85d275666cbd3c0cc32b56cJP Abgrall 1382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif /* WIN32 */ 1392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 14053f17a9db278d33517d9888dd77848f554522a38JP Abgrall#ifndef HAVE___ATTRIBUTE__ 14153f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define __attribute__(x) 14253f17a9db278d33517d9888dd77848f554522a38JP Abgrall#endif 14353f17a9db278d33517d9888dd77848f554522a38JP Abgrall 14453f17a9db278d33517d9888dd77848f554522a38JP Abgrall/* 14553f17a9db278d33517d9888dd77848f554522a38JP Abgrall * Used to declare a structure unaligned, so that the C compiler, 14653f17a9db278d33517d9888dd77848f554522a38JP Abgrall * if necessary, generates code that doesn't assume alignment. 14753f17a9db278d33517d9888dd77848f554522a38JP Abgrall * This is required because there is no guarantee that the packet 14853f17a9db278d33517d9888dd77848f554522a38JP Abgrall * data we get from libpcap/WinPcap is properly aligned. 14953f17a9db278d33517d9888dd77848f554522a38JP Abgrall * 15053f17a9db278d33517d9888dd77848f554522a38JP Abgrall * This assumes that, for all compilers that support __attribute__: 15153f17a9db278d33517d9888dd77848f554522a38JP Abgrall * 15253f17a9db278d33517d9888dd77848f554522a38JP Abgrall * 1) they support __attribute__((packed)); 15353f17a9db278d33517d9888dd77848f554522a38JP Abgrall * 15453f17a9db278d33517d9888dd77848f554522a38JP Abgrall * 2) for all instruction set architectures requiring strict 15553f17a9db278d33517d9888dd77848f554522a38JP Abgrall * alignment, declaring a structure with that attribute 15653f17a9db278d33517d9888dd77848f554522a38JP Abgrall * causes the compiler to generate code that handles 15753f17a9db278d33517d9888dd77848f554522a38JP Abgrall * misaligned 2-byte, 4-byte, and 8-byte integral 15853f17a9db278d33517d9888dd77848f554522a38JP Abgrall * quantities. 15953f17a9db278d33517d9888dd77848f554522a38JP Abgrall * 16053f17a9db278d33517d9888dd77848f554522a38JP Abgrall * It does not (yet) handle compilers where you can get the compiler 16153f17a9db278d33517d9888dd77848f554522a38JP Abgrall * to generate code of that sort by some other means. 16253f17a9db278d33517d9888dd77848f554522a38JP Abgrall * 16353f17a9db278d33517d9888dd77848f554522a38JP Abgrall * This is required in order to, for example, keep the compiler from 16453f17a9db278d33517d9888dd77848f554522a38JP Abgrall * generating, for 16553f17a9db278d33517d9888dd77848f554522a38JP Abgrall * 16653f17a9db278d33517d9888dd77848f554522a38JP Abgrall * if (bp->bp_htype == 1 && bp->bp_hlen == 6 && bp->bp_op == BOOTPREQUEST) { 16753f17a9db278d33517d9888dd77848f554522a38JP Abgrall * 16853f17a9db278d33517d9888dd77848f554522a38JP Abgrall * in print-bootp.c, code that loads the first 4-byte word of a 16953f17a9db278d33517d9888dd77848f554522a38JP Abgrall * "struct bootp", masking out the bp_hops field, and comparing the result 17053f17a9db278d33517d9888dd77848f554522a38JP Abgrall * against 0x01010600. 17153f17a9db278d33517d9888dd77848f554522a38JP Abgrall * 17253f17a9db278d33517d9888dd77848f554522a38JP Abgrall * Note: this also requires that padding be put into the structure, 17353f17a9db278d33517d9888dd77848f554522a38JP Abgrall * at least for compilers where it's implemented as __attribute__((packed)). 17453f17a9db278d33517d9888dd77848f554522a38JP Abgrall */ 17553f17a9db278d33517d9888dd77848f554522a38JP Abgrall#if defined(_MSC_VER) && defined(UNALIGNED) 17653f17a9db278d33517d9888dd77848f554522a38JP Abgrall/* MSVC may have its own macro defined with the same name and purpose. */ 17753f17a9db278d33517d9888dd77848f554522a38JP Abgrall#else 17853f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define UNALIGNED __attribute__((packed)) 1792949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif 1802949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 1812949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#if defined(WIN32) || defined(MSDOS) 1822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project #define FOPEN_READ_TXT "rt" 1832949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project #define FOPEN_READ_BIN "rb" 1842949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project #define FOPEN_WRITE_TXT "wt" 1852949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project #define FOPEN_WRITE_BIN "wb" 1862949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#else 1872949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project #define FOPEN_READ_TXT "r" 1882949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project #define FOPEN_READ_BIN FOPEN_READ_TXT 1892949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project #define FOPEN_WRITE_TXT "w" 1902949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project #define FOPEN_WRITE_BIN FOPEN_WRITE_TXT 1912949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif 1922949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 19353f17a9db278d33517d9888dd77848f554522a38JP Abgrall#if defined(__GNUC__) && defined(__i386__) && !defined(__APPLE__) && !defined(__ntohl) 1942949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project #undef ntohl 1952949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project #undef ntohs 1962949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project #undef htonl 1972949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project #undef htons 1982949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 19953f17a9db278d33517d9888dd77848f554522a38JP Abgrall static __inline__ unsigned long __ntohl (unsigned long x); 20053f17a9db278d33517d9888dd77848f554522a38JP Abgrall static __inline__ unsigned short __ntohs (unsigned short x); 2012949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 2022949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project #define ntohl(x) __ntohl(x) 2032949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project #define ntohs(x) __ntohs(x) 2042949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project #define htonl(x) __ntohl(x) 2052949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project #define htons(x) __ntohs(x) 2062949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 20753f17a9db278d33517d9888dd77848f554522a38JP Abgrall static __inline__ unsigned long __ntohl (unsigned long x) 2082949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 2092949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project __asm__ ("xchgb %b0, %h0\n\t" /* swap lower bytes */ 2102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project "rorl $16, %0\n\t" /* swap words */ 2112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project "xchgb %b0, %h0" /* swap higher bytes */ 2122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project : "=q" (x) : "0" (x)); 2132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return (x); 2142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 2152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 21653f17a9db278d33517d9888dd77848f554522a38JP Abgrall static __inline__ unsigned short __ntohs (unsigned short x) 2172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 2182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project __asm__ ("xchgb %b0, %h0" /* swap bytes */ 2192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project : "=q" (x) : "0" (x)); 2202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return (x); 2212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 2222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif 2232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 2242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifndef INET_ADDRSTRLEN 2252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define INET_ADDRSTRLEN 16 2262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif 2272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 2282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifndef TRUE 2292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define TRUE 1 2302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif 2312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 2322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifndef FALSE 2332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define FALSE 0 2342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif 2352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 23653f17a9db278d33517d9888dd77848f554522a38JP Abgrall/* 23753f17a9db278d33517d9888dd77848f554522a38JP Abgrall * The Apple deprecation workaround macros below were adopted from the 23853f17a9db278d33517d9888dd77848f554522a38JP Abgrall * FreeRADIUS server code under permission of Alan DeKok and Arran Cudbard-Bell. 23953f17a9db278d33517d9888dd77848f554522a38JP Abgrall */ 24053f17a9db278d33517d9888dd77848f554522a38JP Abgrall 24153f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define XSTRINGIFY(x) #x 24253f17a9db278d33517d9888dd77848f554522a38JP Abgrall 24353f17a9db278d33517d9888dd77848f554522a38JP Abgrall/* 24453f17a9db278d33517d9888dd77848f554522a38JP Abgrall * Macros for controlling warnings in GCC >= 4.2 and clang >= 2.8 24553f17a9db278d33517d9888dd77848f554522a38JP Abgrall */ 24653f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define DIAG_JOINSTR(x,y) XSTRINGIFY(x ## y) 24753f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define DIAG_DO_PRAGMA(x) _Pragma (#x) 24853f17a9db278d33517d9888dd77848f554522a38JP Abgrall 24953f17a9db278d33517d9888dd77848f554522a38JP Abgrall#if defined(__GNUC__) && ((__GNUC__ * 100) + __GNUC_MINOR__) >= 402 25053f17a9db278d33517d9888dd77848f554522a38JP Abgrall# define DIAG_PRAGMA(x) DIAG_DO_PRAGMA(GCC diagnostic x) 25153f17a9db278d33517d9888dd77848f554522a38JP Abgrall# if ((__GNUC__ * 100) + __GNUC_MINOR__) >= 406 25253f17a9db278d33517d9888dd77848f554522a38JP Abgrall# define DIAG_OFF(x) DIAG_PRAGMA(push) DIAG_PRAGMA(ignored DIAG_JOINSTR(-W,x)) 25353f17a9db278d33517d9888dd77848f554522a38JP Abgrall# define DIAG_ON(x) DIAG_PRAGMA(pop) 25453f17a9db278d33517d9888dd77848f554522a38JP Abgrall# else 25553f17a9db278d33517d9888dd77848f554522a38JP Abgrall# define DIAG_OFF(x) DIAG_PRAGMA(ignored DIAG_JOINSTR(-W,x)) 25653f17a9db278d33517d9888dd77848f554522a38JP Abgrall# define DIAG_ON(x) DIAG_PRAGMA(warning DIAG_JOINSTR(-W,x)) 25753f17a9db278d33517d9888dd77848f554522a38JP Abgrall# endif 25853f17a9db278d33517d9888dd77848f554522a38JP Abgrall#elif defined(__clang__) && ((__clang_major__ * 100) + __clang_minor__ >= 208) 25953f17a9db278d33517d9888dd77848f554522a38JP Abgrall# define DIAG_PRAGMA(x) DIAG_DO_PRAGMA(clang diagnostic x) 26053f17a9db278d33517d9888dd77848f554522a38JP Abgrall# define DIAG_OFF(x) DIAG_PRAGMA(push) DIAG_PRAGMA(ignored DIAG_JOINSTR(-W,x)) 26153f17a9db278d33517d9888dd77848f554522a38JP Abgrall# define DIAG_ON(x) DIAG_PRAGMA(pop) 26253f17a9db278d33517d9888dd77848f554522a38JP Abgrall#else 26353f17a9db278d33517d9888dd77848f554522a38JP Abgrall# define DIAG_OFF(x) 26453f17a9db278d33517d9888dd77848f554522a38JP Abgrall# define DIAG_ON(x) 26553f17a9db278d33517d9888dd77848f554522a38JP Abgrall#endif 26653f17a9db278d33517d9888dd77848f554522a38JP Abgrall 26753f17a9db278d33517d9888dd77848f554522a38JP Abgrall/* 26853f17a9db278d33517d9888dd77848f554522a38JP Abgrall * For dealing with APIs which are only deprecated in OSX (like the OpenSSL API) 26953f17a9db278d33517d9888dd77848f554522a38JP Abgrall */ 27053f17a9db278d33517d9888dd77848f554522a38JP Abgrall#ifdef __APPLE__ 27153f17a9db278d33517d9888dd77848f554522a38JP Abgrall# define USES_APPLE_DEPRECATED_API DIAG_OFF(deprecated-declarations) 27253f17a9db278d33517d9888dd77848f554522a38JP Abgrall# define USES_APPLE_RST DIAG_ON(deprecated-declarations) 27353f17a9db278d33517d9888dd77848f554522a38JP Abgrall#else 27453f17a9db278d33517d9888dd77848f554522a38JP Abgrall# define USES_APPLE_DEPRECATED_API 27553f17a9db278d33517d9888dd77848f554522a38JP Abgrall# define USES_APPLE_RST 27653f17a9db278d33517d9888dd77848f554522a38JP Abgrall#endif 27753f17a9db278d33517d9888dd77848f554522a38JP Abgrall 27853f17a9db278d33517d9888dd77848f554522a38JP Abgrall/* 27953f17a9db278d33517d9888dd77848f554522a38JP Abgrall * end of Apple deprecation workaround macros 28053f17a9db278d33517d9888dd77848f554522a38JP Abgrall */ 28153f17a9db278d33517d9888dd77848f554522a38JP Abgrall 2822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif /* tcpdump_stdinc_h */ 283