]> granicus.if.org Git - rtmpdump/commitdiff
Cleanup more endian cruft
authorhyc <hyc@400ebc74-4327-4243-bc38-086b20814532>
Mon, 1 Mar 2010 04:30:34 +0000 (04:30 +0000)
committerhyc <hyc@400ebc74-4327-4243-bc38-086b20814532>
Mon, 1 Mar 2010 04:30:34 +0000 (04:30 +0000)
git-svn-id: svn://svn.mplayerhq.hu/rtmpdump/trunk@277 400ebc74-4327-4243-bc38-086b20814532

amf.c
bytes.h

diff --git a/amf.c b/amf.c
index 1fdfc64234146f806aee79f9d4749fcf7b20c307..70432a5e4e57e8f90f13facd06d1efc6ae4527aa 100644 (file)
--- a/amf.c
+++ b/amf.c
@@ -70,13 +70,11 @@ AMF_DecodeString(const char *data, AVal * bv)
 double
 AMF_DecodeNumber(const char *data)
 {
+  double dVal;
 #if __FLOAT_WORD_ORDER == __BYTE_ORDER
 #if __BYTE_ORDER == __BIG_ENDIAN
-  double dVal;
   memcpy(&dVal, data, 8);
-  return dVal;
 #elif __BYTE_ORDER == __LITTLE_ENDIAN
-  double dVal;
   unsigned char *ci, *co;
   ci = (unsigned char *) data;
   co = (unsigned char *) &dVal;
@@ -88,26 +86,35 @@ AMF_DecodeNumber(const char *data)
   co[5] = ci[2];
   co[6] = ci[1];
   co[7] = ci[0];
-  return dVal;
 #endif
 #else
 #if __BYTE_ORDER == __LITTLE_ENDIAN    // __FLOAT_WORD_ORER == __BIG_ENDIAN
-  uint32_t in1 = *((uint32_t *) data);
-  uint32_t in2 = *((uint32_t *) (data + 4));
-
-  in1 = __bswap_32(in1);
-  in2 = __bswap_32(in2);
-
-  uint64_t res = ((uint64_t) in2 << 32) | (uint64_t) in1;
-  return *((double *) &res);
+  unsigned char *ci, *co;
+  ci = (unsigned char *) data;
+  co = (unsigned char *) &dVal;
+  co[0] = ci[3];
+  co[1] = ci[2];
+  co[2] = ci[1];
+  co[3] = ci[0];
+  co[4] = ci[7];
+  co[5] = ci[6];
+  co[6] = ci[5];
+  co[7] = ci[4];
 #else // __BYTE_ORDER == __BIG_ENDIAN && __FLOAT_WORD_ORER == __LITTLE_ENDIAN
-  uint32_t in1 = *((uint32_t *) data);
-  uint32_t in2 = *((uint32_t *) (data + 4));
-
-  uint64_t res = ((uint64_t) in1 << 32) | (uint64_t) in2;
-  return *((double *) &res);
+  unsigned char *ci, *co;
+  ci = (unsigned char *) data;
+  co = (unsigned char *) &dVal;
+  co[0] = ci[4];
+  co[1] = ci[5];
+  co[2] = ci[6];
+  co[3] = ci[7];
+  co[4] = ci[0];
+  co[5] = ci[1];
+  co[6] = ci[2];
+  co[7] = ci[3];
 #endif
 #endif
+  return dVal;
 }
 
 bool
diff --git a/bytes.h b/bytes.h
index 83bdc41a477d614f9b2a89956b4b405d440c4527..98979b74accb987d607b50a88d861b09c631e41c 100644 (file)
--- a/bytes.h
+++ b/bytes.h
 
 typedef unsigned char uint8_t;
 
-#elif (defined(__FreeBSD__) && __FreeBSD_version >= 470000) || defined(__OpenBSD__) || defined(__NetBSD__) // *BSD
-#include <sys/endian.h>
-#define __BIG_ENDIAN    BIG_ENDIAN
-#define __LITTLE_ENDIAN LITTLE_ENDIAN
-#define __BYTE_ORDER    BYTE_ORDER
+#else /* !WIN32 */
 
-#elif (defined(BSD) && (BSD >= 199103)) || defined(__APPLE__) // more BSD
-#include <machine/endian.h>
-#define __BIG_ENDIAN   BIG_ENDIAN
-#define __LITTLE_ENDIAN        LITTLE_ENDIAN
-#define __BYTE_ORDER   BYTE_ORDER
+#include <sys/param.h>
 
-#elif defined(__linux__) //|| defined (__BEOS__) // Linux, BeOS
-#include <endian.h>
-#include <byteswap.h>
+#if defined(BYTE_ORDER) && !defined(__BYTE_ORDER)
+#define __BYTE_ORDER    BYTE_ORDER
+#endif
 
-//typedef __uint64_t uint64_t;
-//typedef __uint32_t uint32_t;
+#if defined(BIG_ENDIAN) && !defined(__BIG_ENDIAN)
+#define __BIG_ENDIAN   BIG_ENDIAN
 #endif
 
-// define missing byte swap macros
-#ifndef __bswap_32
-#define __bswap_32(x) \
-     ((((x) & 0xff000000) >> 24) | (((x) & 0x00ff0000) >>  8) |               \
-     (((x) & 0x0000ff00) <<  8) | (((x) & 0x000000ff) << 24))
+#if defined(LITTLE_ENDIAN) && !defined(__LITTLE_ENDIAN)
+#define __LITTLE_ENDIAN        LITTLE_ENDIAN
 #endif
 
+#endif /* !WIN32 */
+
 // define default endianness
 #ifndef __LITTLE_ENDIAN
 #define __LITTLE_ENDIAN        1234