diff -ur lzip-1.8.old/decoder.cc lzip-1.8/decoder.cc
--- lzip-1.8.old/decoder.cc	2009-08-31 06:20:13 +0800
+++ lzip-1.8/decoder.cc	2009-10-12 13:46:04 +0800
@@ -106,7 +106,7 @@
       {
       if( trailer.data_size() >= 0 )
         { pp();
-          std::fprintf( stderr, "data size mismatch; trailer says %lld, data size is %lld.\n",
+          std::fprintf( stderr, "data size mismatch; trailer says %"LZIPLL"d, data size is %"LZIPLL"d.\n",
                         trailer.data_size(), data_position() ); }
       else pp( "member trailer is corrupt" );
       }
@@ -118,13 +118,13 @@
       {
       if( trailer.member_size() >= 0 )
         { pp();
-          std::fprintf( stderr, "member size mismatch; trailer says %lld, member size is %lld.\n",
+          std::fprintf( stderr, "member size mismatch; trailer says %"LZIPLL"d, member size is %"LZIPLL"d.\n",
                         trailer.member_size(), member_position() ); }
       else pp( "member trailer is corrupt" );
       }
     }
   if( !error && verbosity >= 3 )
-    std::fprintf( stderr, "data crc %08X, data size %8lld, member size %8lld.  ",
+    std::fprintf( stderr, "data crc %08X, data size %8"LZIPLL"d, member size %8"LZIPLL"d.  ",
                   (unsigned int)trailer.data_crc(), trailer.data_size(),
                   trailer.member_size() );
   return !error;
diff -ur lzip-1.8.old/lzip.h lzip-1.8/lzip.h
--- lzip-1.8.old/lzip.h	2009-06-02 17:01:09 +0800
+++ lzip-1.8/lzip.h	2009-10-12 13:46:04 +0800
@@ -15,6 +15,22 @@
     along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 
+#ifdef __MSVCRT__
+/* Using MSVCRT conventions */
+#define LZIPLL "I64"
+#define S_ISSOCK(x) 0
+/* We don't care about permissions */
+#define S_IRGRP _S_IREAD
+#define S_IROTH _S_IREAD
+#define S_IRGRP _S_IREAD
+#define S_IROTH _S_IREAD
+/* Unimplemented Functions */
+#define fchmod(x,y) 0
+#define fchown(x,y,z) 0
+#else
+#define LZIPLL "ll"
+#endif
+
 class State
   {
   unsigned char st;
diff -ur lzip-1.8.old/lziprecover.cc lzip-1.8/lziprecover.cc
--- lzip-1.8.old/lziprecover.cc	2009-05-21 17:52:35 +0800
+++ lzip-1.8/lziprecover.cc	2009-10-12 13:48:27 +0800
@@ -279,6 +279,10 @@
   {
   int rest = size;
   errno = 0;
+  #ifdef __MSVCRT__
+  /*set IO to binary mode */
+  int prevmode = _setmode(  fd, _O_BINARY );
+  #endif
   while( rest > 0 )
     {
     errno = 0;
@@ -287,6 +291,10 @@
     else if( n == 0 ) break;
     else if( errno != EINTR && errno != EAGAIN ) break;
     }
+  #ifdef __MSVCRT__
+  /*Restore IO to default mode */
+  _setmode(  fd, prevmode );
+  #endif
   return ( rest > 0 ) ? size - rest : size;
   }
 
@@ -298,6 +306,10 @@
   {
   int rest = size;
   errno = 0;
+  #ifdef __MSVCRT__
+  /*set IO to binary mode */
+  int prevmode = _setmode(  fd, _O_BINARY );
+  #endif
   while( rest > 0 )
     {
     errno = 0;
@@ -305,6 +317,10 @@
     if( n > 0 ) rest -= n;
     else if( errno && errno != EINTR && errno != EAGAIN ) break;
     }
+  #ifdef __MSVCRT__
+  /*Restore IO to default mode */
+  _setmode(  fd, prevmode );
+  #endif
   return ( rest > 0 ) ? size - rest : size;
   }
 
diff -ur lzip-1.8.old/main.cc lzip-1.8/main.cc
--- lzip-1.8.old/main.cc	2009-08-13 02:34:01 +0800
+++ lzip-1.8/main.cc	2009-10-12 13:51:00 +0800
@@ -140,7 +140,7 @@
   for( int i = 0; i < 8 && ( llabs( num ) > limit ||
        ( llabs( num ) >= factor && num % factor == 0 ) ); ++i )
     { num /= factor; p = prefix[i]; }
-  snprintf( buf, sizeof buf, "%lld %s", num, p );
+  snprintf( buf, sizeof buf, "%"LZIPLL"d %s", num, p );
   return buf;
   }
 
@@ -446,7 +446,7 @@
         std::fprintf( stderr, "no data compressed.\n" );
       else
         std::fprintf( stderr, "%6.3f:1, %6.3f bits/byte, "
-                              "%5.2f%% saved, %lld in, %lld out.\n",
+                              "%5.2f%% saved, %"LZIPLL"d in, %"LZIPLL"d out.\n",
                       (double)in_size / out_size,
                       ( 8.0 * out_size ) / in_size,
                       100.0 * ( 1.0 - ( (double)out_size / in_size ) ),
@@ -518,10 +518,10 @@
           {
           pp();
           if( result == 2 )
-            std::fprintf( stderr, "file ends unexpectedly at pos %lld\n",
+            std::fprintf( stderr, "file ends unexpectedly at pos %"LZIPLL"d\n",
                           partial_file_pos );
           else
-            std::fprintf( stderr, "decoder error at pos %lld\n",
+            std::fprintf( stderr, "decoder error at pos %"LZIPLL"d\n",
                           partial_file_pos );
           }
         return 2;
@@ -551,7 +551,9 @@
 void set_signals() throw()
   {
   signal( SIGTERM, signal_handler );
+  #ifndef __MSVCRT__ /* Windows doesn't have SIGHUP */
   signal( SIGHUP, signal_handler );
+  #endif
   signal( SIGINT, signal_handler );
   }
 
@@ -609,6 +611,10 @@
   {
   int rest = size;
   errno = 0;
+  #ifdef __MSVCRT__
+  /*set IO to binary mode */
+  int prevmode = _setmode(  fd, _O_BINARY );
+  #endif
   while( rest > 0 )
     {
     errno = 0;
@@ -617,6 +623,10 @@
     else if( n == 0 ) break;
     else if( errno != EINTR && errno != EAGAIN ) break;
     }
+  #ifdef __MSVCRT__
+  /*Restore IO to default mode */
+  _setmode(  fd, prevmode );
+  #endif
   return ( rest > 0 ) ? size - rest : size;
   }
 
@@ -628,6 +638,10 @@
   {
   int rest = size;
   errno = 0;
+  #ifdef __MSVCRT__
+  /*set IO to binary mode */
+  int prevmode = _setmode(  fd, _O_BINARY );
+  #endif
   while( rest > 0 )
     {
     errno = 0;
@@ -635,6 +649,10 @@
     if( n > 0 ) rest -= n;
     else if( errno && errno != EINTR && errno != EAGAIN ) break;
     }
+  #ifdef __MSVCRT__
+  /*Restore IO to default mode */
+  _setmode(  fd, prevmode );
+  #endif
   return ( rest > 0 ) ? size - rest : size;
   }
 
