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 register unsigned short w = w_int; 59 __asm__ volatile("xchgb %h1,%b1" : "=q" (w) : "0" (w)); 60 return (w); /* zero-extend for compat */ 61} 62#endif 63 64#if !defined(htons) 65unsigned short htons(unsigned short); 66#define htons ntohs 67#endif 68 69#if !defined(ntohl) 70static __inline__ unsigned long ntohl(unsigned long); 71static __inline__ 72unsigned long 73ntohl(register unsigned long value) 74{ 75 register unsigned long l = value; 76 __asm__ volatile("bswap %0" : "=r" (l) : "0" (l)); 77 return l; 78} 79#endif 80 81#if !defined(htonl) 82unsigned long htonl(unsigned long); 83#define htonl ntohl 84#endif 85 86#define NTOHL(x) (x) = ntohl((unsigned long)x) 87#define NTOHS(x) (x) = ntohs((unsigned short)x) 88#define HTONL(x) (x) = htonl((unsigned long)x) 89#define HTONS(x) (x) = htons((unsigned short)x) 90 91#endif 92