3 /// Endian conversion macros
7 Copyright (C) 2006-2012, Net Direct Inc. (http://www.netdirect.ca/)
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 2 of the License, or
12 (at your option) any later version.
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU General Public License in the COPYING file at the
19 root directory of this project for more details.
22 #ifndef __BARRY_ENDIAN_H__
23 #define __BARRY_ENDIAN_H__
25 // The Blackberry is little endian in its USB data. Fortunately,
26 // this makes conversion easy on the x86...
27 #include "config.h" // endian.h is not installed, so this is safe
30 //#include <byteswap.h>
32 // The following is a byteswap.h replacement, for systems like Mac OS X.
33 // It was taken from a patch to the GPL software cowpatty, patch
35 // http://www.netstumbler.org/showpost.php?s=79764fd1526e4653d5cb4432225da6ee&p=190494&postcount=29
37 //#warning "byteswap.h is an unportable GNU extension! Don't use!"
38 static inline uint16_t bbswap_16(uint16_t x
) {
39 return (x
>>8) | (x
<<8);
42 static inline uint32_t bbswap_32(uint32_t x
) {
43 return (bbswap_16(x
&0xffff)<<16) | (bbswap_16(x
>>16));
46 static inline uint64_t bbswap_64(uint64_t x
) {
47 return (((uint64_t)bbswap_32(x
&0xffffffffull
))<<32) | (bbswap_32(x
>>32));
50 #ifndef WORDS_BIGENDIAN
52 // For when Blackberry needs little endian (most of the time)
53 #define btohs(x) x // for uint16_t
54 #define btohl(x) x // for uint32_t
55 #define btohll(x) x // for uint64_t
56 #define htobs(x) x // for uint16_t
57 #define htobl(x) x // for uint32_t
58 #define htobll(x) x // for uint64_t
60 // For when Blackberry needs big endian (often in JavaLoader protocol)
61 #define be_btohs(x) bbswap_16(x) // for uint16_t
62 #define be_btohl(x) bbswap_32(x) // for uint32_t
63 #define be_btohll(x) bbswap_64(x) // for uint64_t
64 #define be_htobs(x) bbswap_16(x) // for uint16_t
65 #define be_htobl(x) bbswap_32(x) // for uint32_t
66 #define be_htobll(x) bbswap_64(x) // for uint64_t
70 // For when Blackberry needs little endian (most of the time)
71 #define btohs(x) bbswap_16(x) // for uint16_t
72 #define btohl(x) bbswap_32(x) // for uint32_t
73 #define btohll(x) bbswap_64(x) // for uint64_t
74 #define htobs(x) bbswap_16(x) // for uint16_t
75 #define htobl(x) bbswap_32(x) // for uint32_t
76 #define htobll(x) bbswap_64(x) // for uint64_t
78 // For when Blackberry needs big endian (often in JavaLoader protocol)
79 #define be_btohs(x) x // for uint16_t
80 #define be_btohl(x) x // for uint32_t
81 #define be_btohll(x) x // for uint64_t
82 #define be_htobs(x) x // for uint16_t
83 #define be_htobl(x) x // for uint32_t
84 #define be_htobll(x) x // for uint64_t