fix MSVC check for ntohl()
[flac.git] / src / libFLAC / bitwriter.c
index 28d2675..4ff87bc 100644 (file)
 
 #include <stdlib.h> /* for malloc() */
 #include <string.h> /* for memcpy(), memset() */
-#if defined(_MSC_VER) && _MSC_VER <= 1200
+#ifdef _MSC_VER
 #include <winsock.h> /* for ntohl() */
+#elif defined FLAC__SYS_DARWIN
+#include <machine/endian.h> /* for ntohl() */
 #else
 #include <netinet/in.h> /* for ntohl() */
 #endif
@@ -58,8 +60,12 @@ typedef FLAC__uint32 bwword;
 #if WORDS_BIGENDIAN
 #define SWAP_BE_WORD_TO_HOST(x) (x)
 #else
+#ifdef _MSC_VER
+#define SWAP_BE_WORD_TO_HOST(x) local_swap32_(x)
+#else
 #define SWAP_BE_WORD_TO_HOST(x) ntohl(x)
 #endif
+#endif
 
 /*
  * The default capacity here doesn't matter too much.  The buffer always grows
@@ -98,6 +104,15 @@ struct FLAC__BitWriter {
        unsigned bits; /* # of used bits in accum */
 };
 
+#ifdef _MSC_VER
+/* OPT: an MSVC built-in would be better */
+static _inline FLAC__uint32 local_swap32_(FLAC__uint32 x)
+{
+       x = ((x<<8)&0xFF00FF00) | ((x>>8)&0x00FF00FF);
+       return (x>>16) | (x<<16);
+}
+#endif
+
 /* * WATCHOUT: The current implementation only grows the buffer. */
 static FLAC__bool bitwriter_grow_(FLAC__BitWriter *bw, unsigned bits_to_add)
 {
@@ -261,9 +276,6 @@ FLAC__bool FLAC__bitwriter_get_buffer(FLAC__BitWriter *bw, const FLAC__byte **bu
                return false;
        /* if we have bits in the accumulator we have to flush those to the buffer first */
        if(bw->bits) {
-#ifdef DEBUG
-if(bw->words == bw->capacity)fprintf(stderr,"@@@@@@ DEBUG:resizing in FLAC__bitwriter_get_buffer()\n");
-#endif
                FLAC__ASSERT(bw->words <= bw->capacity);
                if(bw->words == bw->capacity && !bitwriter_grow_(bw, FLAC__BITS_PER_WORD))
                        return false;
@@ -347,18 +359,12 @@ FLaC__INLINE FLAC__bool FLAC__bitwriter_write_raw_uint32(FLAC__BitWriter *bw, FL
                bw->bits += bits;
        }
        else if(bw->bits) { /* WATCHOUT: if bw->bits == 0, left==FLAC__BITS_PER_WORD and bw->accum<<=left is a NOP instead of setting to 0 */
-#ifdef DEBUG
-if(left>=FLAC__BITS_PER_WORD)fprintf(stderr,"@@@@@@ bitwriter shift error @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n");
-#endif
                bw->accum <<= left;
                bw->accum |= val >> (bw->bits = bits - left);
                bw->buffer[bw->words++] = SWAP_BE_WORD_TO_HOST(bw->accum);
                bw->accum = val;
        }
        else {
-#ifdef DEBUG
-if(bits!=left)fprintf(stderr,"@@@@@@ bitwriter shift error2 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n");
-#endif
                bw->accum = val;
                bw->bits = 0;
                bw->buffer[bw->words++] = SWAP_BE_WORD_TO_HOST(val);
@@ -596,9 +602,7 @@ break1:
                         * triggered the (lsbits<left) case above.
                         */
                        FLAC__ASSERT(bw->bits);
-#ifdef DEBUG
-if(left>=FLAC__BITS_PER_WORD)fprintf(stderr,"@@@@@@ bitwriter shift error @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n");
-#endif
+                       FLAC__ASSERT(left < FLAC__BITS_PER_WORD);
                        bw->accum <<= left;
                        bw->accum |= uval >> (bw->bits = lsbits - left);
                        bw->buffer[bw->words++] = SWAP_BE_WORD_TO_HOST(bw->accum);