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 *
322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * @(#) $Header: /tcpdump/master/tcpdump/tcpdump-stdinc.h,v 1.12.2.5 2006/06/23 02:07:27 hannes 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
582949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#if !defined(__MINGW32__) && !defined(__WATCOMC__)
592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#undef toascii
602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define isascii __isascii
612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define toascii __toascii
622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define stat _stat
632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define open _open
642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define fstat _fstat
652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define read _read
662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define close _close
672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define O_RDONLY _O_RDONLY
682949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projecttypedef short ino_t;
702949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif /* __MINGW32__ */
712949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifdef __MINGW32__
732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include <stdint.h>
742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif
752949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
762949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* Protos for missing/x.c functions (ideally <missing/addrinfo.h>
772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * should be used, but it clashes with <ws2tcpip.h>).
782949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */
792949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectextern const char *inet_ntop (int, const void *, char *, size_t);
802949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectextern int inet_pton (int, const char *, void *);
812949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectextern int inet_aton (const char *cp, struct in_addr *addr);
822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
832949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifndef INET6_ADDRSTRLEN
842949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define INET6_ADDRSTRLEN 46
852949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif
862949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
872949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifndef toascii
882949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define toascii(c) ((c) & 0x7f)
892949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif
902949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
912949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifndef caddr_t
922949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projecttypedef char* caddr_t;
932949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif /* caddr_t */
942949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
952949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define MAXHOSTNAMELEN	64
962949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	NI_MAXHOST	1025
972949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define snprintf _snprintf
982949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define vsnprintf _vsnprintf
992949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define RETSIGTYPE void
1002949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
1012949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#else /* WIN32 */
1022949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
1032949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include <ctype.h>
1042949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include <unistd.h>
1052949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include <netdb.h>
1062949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#if HAVE_INTTYPES_H
1072949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include <inttypes.h>
1082949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#else
1092949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#if HAVE_STDINT_H
1102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include <stdint.h>
1112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif
1122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif
1132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifdef HAVE_SYS_BITYPES_H
1142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include <sys/bitypes.h>
1152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif
1162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include <sys/param.h>
1172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include <sys/types.h>			/* concession to AIX */
1182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include <sys/time.h>
1192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include <sys/socket.h>
1202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include <netinet/in.h>
1212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
1222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifdef TIME_WITH_SYS_TIME
1232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include <time.h>
1242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif
1252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
1262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include <arpa/inet.h>
1272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
1282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif /* WIN32 */
1292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
1302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifdef INET6
1312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include "ip6.h"
1322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif
1332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
1342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#if defined(WIN32) || defined(MSDOS)
1352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project  #define FOPEN_READ_TXT   "rt"
1362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project  #define FOPEN_READ_BIN   "rb"
1372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project  #define FOPEN_WRITE_TXT  "wt"
1382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project  #define FOPEN_WRITE_BIN  "wb"
1392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#else
1402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project  #define FOPEN_READ_TXT   "r"
1412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project  #define FOPEN_READ_BIN   FOPEN_READ_TXT
1422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project  #define FOPEN_WRITE_TXT  "w"
1432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project  #define FOPEN_WRITE_BIN  FOPEN_WRITE_TXT
1442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif
1452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
1462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#if defined(__GNUC__) && defined(__i386__) && !defined(__ntohl)
1472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project  #undef ntohl
1482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project  #undef ntohs
1492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project  #undef htonl
1502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project  #undef htons
1512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
1522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project  extern __inline__ unsigned long __ntohl (unsigned long x);
1532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project  extern __inline__ unsigned short __ntohs (unsigned short x);
1542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
1552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project  #define ntohl(x)  __ntohl(x)
1562949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project  #define ntohs(x)  __ntohs(x)
1572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project  #define htonl(x)  __ntohl(x)
1582949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project  #define htons(x)  __ntohs(x)
1592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
1602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project  extern __inline__ unsigned long __ntohl (unsigned long x)
1612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project  {
1622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    __asm__ ("xchgb %b0, %h0\n\t"   /* swap lower bytes  */
1632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project             "rorl  $16, %0\n\t"    /* swap words        */
1642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project             "xchgb %b0, %h0"       /* swap higher bytes */
1652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            : "=q" (x) : "0" (x));
1662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    return (x);
1672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project  }
1682949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
1692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project  extern __inline__ unsigned short __ntohs (unsigned short x)
1702949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project  {
1712949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    __asm__ ("xchgb %b0, %h0"       /* swap bytes */
1722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            : "=q" (x) : "0" (x));
1732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    return (x);
1742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project  }
1752949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif
1762949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
1772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifndef INET_ADDRSTRLEN
1782949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define INET_ADDRSTRLEN 16
1792949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif
1802949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
1812949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifndef TRUE
1822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define TRUE 1
1832949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif
1842949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
1852949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifndef FALSE
1862949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define FALSE 0
1872949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif
1882949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
1892949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif /* tcpdump_stdinc_h */
190