src/corelib/global/qendian.h
changeset 33 3e2da88830cd
parent 18 2f34d5167611
--- a/src/corelib/global/qendian.h	Tue Jul 06 15:10:48 2010 +0300
+++ b/src/corelib/global/qendian.h	Wed Aug 18 10:37:55 2010 +0300
@@ -44,6 +44,14 @@
 
 #include <QtCore/qglobal.h>
 
+#ifdef Q_OS_LINUX
+# include <features.h>
+#endif
+
+#ifdef __GLIBC__
+#include <byteswap.h>
+#endif
+
 QT_BEGIN_HEADER
 
 QT_BEGIN_NAMESPACE
@@ -264,6 +272,21 @@
  * and it is therefore a bit more convenient and in most cases more efficient.
 */
 template <typename T> T qbswap(T source);
+
+#ifdef __GLIBC__
+template <> inline quint64 qbswap<quint64>(quint64 source)
+{
+    return bswap_64(source);
+}
+template <> inline quint32 qbswap<quint32>(quint32 source)
+{
+    return bswap_32(source);
+}
+template <> inline quint16 qbswap<quint16>(quint16 source)
+{
+    return bswap_16(source);
+}
+#else
 template <> inline quint64 qbswap<quint64>(quint64 source)
 {
     return 0
@@ -292,6 +315,7 @@
                     | ((source & 0x00ff) << 8)
                     | ((source & 0xff00) >> 8) );
 }
+#endif // __GLIBC__
 
 // signed specializations
 template <> inline qint64 qbswap<qint64>(qint64 source)