- fixed null pointer access in opensync's HasMultipleVEvents()
[barry.git] / src / endian.h
blob7f5d8ebded0c828896cff37f4b0cd086421c2f7e
1 ///
2 /// \file endian.h
3 /// Endian conversion macros
4 ///
6 /*
7 Copyright (C) 2006-2007, 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"
29 #ifndef WORDS_BIGENDIAN
30 #define btohs(x) x // for uint16_t
31 #define btohl(x) x // for uint32_t
32 #define btohll(x) x // for uint64_t
33 #define htobs(x) x // for uint16_t
34 #define htobl(x) x // for uint32_t
35 #define htobll(x) x // for uint64_t
36 #else
38 //#include <byteswap.h>
40 // The following is a byteswap.h replacement, for systems like Mac OS X.
41 // It was taken from a patch to the GPL software cowpatty, patch
42 // by user gm2net.
43 // http://www.netstumbler.org/showpost.php?s=79764fd1526e4653d5cb4432225da6ee&p=190494&postcount=29
45 //#warning "byteswap.h is an unportable GNU extension! Don't use!"
47 static inline unsigned short bswap_16(unsigned short x) {
48 return (x>>8) | (x<<8);
51 static inline unsigned int bswap_32(unsigned int x) {
52 return (bswap_16(x&0xffff)<<16) | (bswap_16(x>>16));
55 static inline unsigned long long bswap_64(unsigned long long x) {
56 return (((unsigned long long)bswap_32(x&0xffffffffull))<<32) | (bswap_32(x>>32));
59 #define btohs(x) bswap_16(x) // for uint16_t
60 #define btohl(x) bswap_32(x) // for uint32_t
61 #define btohll(x) bswap_64(x) // for uint64_t
62 #define htobs(x) bswap_16(x) // for uint16_t
63 #define htobl(x) bswap_32(x) // for uint32_t
64 #define htobll(x) bswap_64(x) // for uint64_t
65 #endif
67 #endif