1/* 2 * Copyright (c) 2000-2004 Apple Computer, Inc. All rights reserved. 3 * 4 * @APPLE_OSREFERENCE_LICENSE_HEADER_START@ 5 * 6 * This file contains Original Code and/or Modifications of Original Code 7 * as defined in and that are subject to the Apple Public Source License 8 * Version 2.0 (the 'License'). You may not use this file except in 9 * compliance with the License. The rights granted to you under the License 10 * may not be used to create, or enable the creation or redistribution of, 11 * unlawful or unlicensed copies of an Apple operating system, or to 12 * circumvent, violate, or enable the circumvention or violation of, any 13 * terms of an Apple operating system software license agreement. 14 * 15 * Please obtain a copy of the License at 16 * http://www.opensource.apple.com/apsl/ and read it before using this file. 17 * 18 * The Original Code and all software distributed under the License are 19 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER 20 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, 21 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, 22 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. 23 * Please see the License for the specific language governing rights and 24 * limitations under the License. 25 * 26 * @APPLE_OSREFERENCE_LICENSE_HEADER_END@ 27 */ 28/* 29 * @OSF_COPYRIGHT@ 30 * 31 */ 32 33#ifndef _MACHINE_ENDIAN_H_ 34#define _MACHINE_ENDIAN_H_ 35 36/* 37 * Definitions for byte order, 38 * according to byte significance from low address to high. 39 */ 40#define LITTLE_ENDIAN 1234 /* least-significant byte first (vax) */ 41#define BIG_ENDIAN 4321 /* most-significant byte first (IBM, net) */ 42#define PDP_ENDIAN 3412 /* LSB first in word, MSW first in long (pdp) */ 43 44#define BYTE_ORDER LITTLE_ENDIAN /* byte order on i386 */ 45#define ENDIAN LITTLE 46 47/* 48 * Macros for network/external number representation conversion. 49 * Use GNUC support to inline the byteswappers. 50 */ 51 52#if !defined(ntohs) 53static __inline__ unsigned short ntohs(unsigned short); 54static __inline__ 55unsigned short 56ntohs(unsigned short w_int) 57{ 58 return ((w_int << 8) | (w_int >> 8)); 59} 60#endif 61 62#if !defined(htons) 63unsigned short htons(unsigned short); 64#define htons ntohs 65#endif 66 67#if !defined(ntohl) 68static __inline__ unsigned long ntohl(unsigned long); 69static __inline__ 70unsigned long 71ntohl(register unsigned long value) 72{ 73#if defined(__clang__) 74 return (unsigned long)__builtin_bswap32((unsigned int)value); 75#else 76 register unsigned long l = value; 77 __asm__ volatile("bswap %0" : "=r" (l) : "0" (l)); 78 return l; 79#endif 80} 81#endif 82 83#if !defined(htonl) 84unsigned long htonl(unsigned long); 85#define htonl ntohl 86#endif 87 88#define NTOHL(x) (x) = ntohl((unsigned long)x) 89#define NTOHS(x) (x) = ntohs((unsigned short)x) 90#define HTONL(x) (x) = htonl((unsigned long)x) 91#define HTONS(x) (x) = htons((unsigned short)x) 92 93#endif 94