lib: add prefixes to enums to avoid name clashes on Windows (like ERROR)
[barry.git] / src / endian.h
blob9e0bf63ca5fac9f639cf66ab065a672baf3f5cd1
1 ///
2 /// \file endian.h
3 /// Endian conversion macros
4 ///
6 /*
7 Copyright (C) 2006-2010, 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"
28 #include <stdint.h>
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
34 // by user gm2net.
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!"
39 static inline unsigned short bswap_16(unsigned short x) {
40 return (x>>8) | (x<<8);
43 static inline unsigned int bswap_32(unsigned int x) {
44 return (bswap_16(x&0xffff)<<16) | (bswap_16(x>>16));
47 static inline uint64_t bswap_64(uint64_t x) {
48 return (((uint64_t)bswap_32(x&0xffffffffull))<<32) | (bswap_32(x>>32));
51 #ifndef WORDS_BIGENDIAN
53 // For when Blackberry needs little endian (most of the time)
54 #define btohs(x) x // for uint16_t
55 #define btohl(x) x // for uint32_t
56 #define btohll(x) x // for uint64_t
57 #define htobs(x) x // for uint16_t
58 #define htobl(x) x // for uint32_t
59 #define htobll(x) x // for uint64_t
61 // For when Blackberry needs big endian (often in JavaLoader protocol)
62 #define be_btohs(x) bswap_16(x) // for uint16_t
63 #define be_btohl(x) bswap_32(x) // for uint32_t
64 #define be_btohll(x) bswap_64(x) // for uint64_t
65 #define be_htobs(x) bswap_16(x) // for uint16_t
66 #define be_htobl(x) bswap_32(x) // for uint32_t
67 #define be_htobll(x) bswap_64(x) // for uint64_t
69 #else
71 // For when Blackberry needs little endian (most of the time)
72 #define btohs(x) bswap_16(x) // for uint16_t
73 #define btohl(x) bswap_32(x) // for uint32_t
74 #define btohll(x) bswap_64(x) // for uint64_t
75 #define htobs(x) bswap_16(x) // for uint16_t
76 #define htobl(x) bswap_32(x) // for uint32_t
77 #define htobll(x) bswap_64(x) // for uint64_t
79 // For when Blackberry needs big endian (often in JavaLoader protocol)
80 #define be_btohs(x) x // for uint16_t
81 #define be_btohl(x) x // for uint32_t
82 #define be_btohll(x) x // for uint64_t
83 #define be_htobs(x) x // for uint16_t
84 #define be_htobl(x) x // for uint32_t
85 #define be_htobll(x) x // for uint64_t
87 #endif
89 #endif