use inline byte-swapping function for MSVC
diff --git a/src/libFLAC/bitreader.c b/src/libFLAC/bitreader.c
index f3a65d9..1c6cd82 100644
--- a/src/libFLAC/bitreader.c
+++ b/src/libFLAC/bitreader.c
@@ -66,8 +66,12 @@
 #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
 /* counts the # of zero MSBs in a word */
 #define ALIGNED_UNARY_BITS(word) ( \
 	(word) <= 0xffff ? \
@@ -147,6 +151,15 @@
 	void *client_data;
 };
 
+#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
+
 static FLaC__INLINE void crc16_update_word_(FLAC__BitReader *br, brword word)
 {
 	register unsigned crc = br->read_crc16;
diff --git a/src/libFLAC/bitwriter.c b/src/libFLAC/bitwriter.c
index e9962e9..ba2a9d7 100644
--- a/src/libFLAC/bitwriter.c
+++ b/src/libFLAC/bitwriter.c
@@ -58,8 +58,12 @@
 #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 +102,15 @@
 	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)
 {