Line data Source code
1 : /**
2 : byteorder.c
3 :
4 :
5 : Copyright (C) 2007, Network Resonance, Inc.
6 : All Rights Reserved
7 :
8 : Redistribution and use in source and binary forms, with or without
9 : modification, are permitted provided that the following conditions
10 : are met:
11 :
12 : 1. Redistributions of source code must retain the above copyright
13 : notice, this list of conditions and the following disclaimer.
14 : 2. Redistributions in binary form must reproduce the above copyright
15 : notice, this list of conditions and the following disclaimer in the
16 : documentation and/or other materials provided with the distribution.
17 : 3. Neither the name of Network Resonance, Inc. nor the name of any
18 : contributors to this software may be used to endorse or promote
19 : products derived from this software without specific prior written
20 : permission.
21 :
22 : THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
23 : AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
24 : IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
25 : ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
26 : LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
27 : CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
28 : SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
29 : INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
30 : CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
31 : ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
32 : POSSIBILITY OF SUCH DAMAGE.
33 :
34 :
35 : briank@networkresonance.com Wed May 16 16:46:00 PDT 2007
36 : */
37 :
38 :
39 : static char *RCSSTRING __UNUSED__ ="$Id: byteorder.c,v 1.2 2007/06/26 22:37:55 adamcain Exp $";
40 :
41 : #include "nr_common.h"
42 : #ifndef WIN32
43 : #include <arpa/inet.h>
44 : #endif
45 : #include "r_types.h"
46 : #include "byteorder.h"
47 :
48 : #define IS_BIG_ENDIAN (htonl(0x1) == 0x1)
49 :
50 : #define BYTE(n,i) (((UCHAR*)&(n))[(i)])
51 : #define SWAP(n,x,y) tmp=BYTE((n),(x)), \
52 : BYTE((n),(x))=BYTE((n),(y)), \
53 : BYTE((n),(y))=tmp
54 :
55 : UINT8
56 0 : nr_htonll(UINT8 hostlonglong)
57 : {
58 0 : UINT8 netlonglong = hostlonglong;
59 : UCHAR tmp;
60 :
61 0 : if (!IS_BIG_ENDIAN) {
62 0 : SWAP(netlonglong, 0, 7);
63 0 : SWAP(netlonglong, 1, 6);
64 0 : SWAP(netlonglong, 2, 5);
65 0 : SWAP(netlonglong, 3, 4);
66 : }
67 :
68 0 : return netlonglong;
69 : }
70 :
71 : UINT8
72 0 : nr_ntohll(UINT8 netlonglong)
73 : {
74 0 : return nr_htonll(netlonglong);
75 : }
76 :
|