diff -urN bzip2-1.0.6/bzip2.c bzip2-1.0.6/bzip2.c
--- bzip2-1.0.6/bzip2.c	2010-09-10 19:04:53.000000000 -0400
+++ bzip2-1.0.6/bzip2.c	2011-05-20 21:22:16.853325100 -0400
@@ -1132,8 +1132,8 @@
 static 
 void compress ( Char *name )
 {
-   FILE  *inStr;
-   FILE  *outStr;
+   FILE  *inStr = NULL;
+   FILE  *outStr = NULL;
    Int32 n, i;
    struct MY_STAT statBuf;
 
@@ -1313,8 +1313,8 @@
 static 
 void uncompress ( Char *name )
 {
-   FILE  *inStr;
-   FILE  *outStr;
+   FILE  *inStr = NULL;
+   FILE  *outStr = NULL;
    Int32 n, i;
    Bool  magicNumberOK;
    Bool  cantGuess;
@@ -1511,7 +1511,7 @@
 static 
 void testf ( Char *name )
 {
-   FILE *inStr;
+   FILE *inStr = NULL;
    Bool allOK;
    struct MY_STAT statBuf;
 
diff -urN bzip2-1.0.6/bzip2recover.c bzip2-1.0.6/bzip2recover.c
--- bzip2-1.0.6/bzip2recover.c	2010-09-10 19:18:40.000000000 -0400
+++ bzip2-1.0.6/bzip2recover.c	2011-05-20 21:21:39.518325100 -0400
@@ -24,6 +24,8 @@
 #include <errno.h>
 #include <stdlib.h>
 #include <string.h>
+#include <fcntl.h>
+#include <unistd.h>
 
 
 /* This program records bit locations in the file to be recovered.
@@ -269,6 +271,19 @@
        name[n-1] == '2');
 }
 
+/*---------------------------------------------*/
+/* Open an output file safely with O_EXCL and good permissions */
+FILE* fopen_output( Char* name, const char* mode )
+{
+  FILE *fp;
+  int   fh;
+   
+  fh = open(name, O_WRONLY|O_CREAT|O_EXCL, 0600);
+  if (fh == -1) return NULL;
+  fp = fdopen(fh, mode);
+  if (fp == NULL) close(fh);
+  return fp;
+}
 
 /*---------------------------------------------------*/
 /*---                                             ---*/
@@ -306,6 +321,7 @@
    Int32       b, wrBlock, currBlock, rbCtr;
    MaybeUInt64 bitsRead;
 
+
    UInt32      buffHi, buffLo, blockCRC;
    Char*       p;
 
@@ -486,7 +502,7 @@
          fprintf ( stderr, "   writing block %d to `%s' ...\n",
                            wrBlock+1, outFileName );
 
-         outFile = fopen ( outFileName, "wb" );
+         outFile = fopen_output ( outFileName, "wb" );
          if (outFile == NULL) {
             fprintf ( stderr, "%s: can't write `%s'\n",
                       progName, outFileName );
diff -urN bzip2-1.0.6/bzlib.c bzip2-1.0.6/bzlib.c
--- bzip2-1.0.6/bzlib.c	2010-09-10 18:38:23.000000000 -0400
+++ bzip2-1.0.6/bzlib.c	2011-05-20 21:21:39.524325100 -0400
@@ -1372,7 +1372,7 @@
 #ifndef BZ_NO_STDIO
 /*---------------------------------------------------*/
 
-#if defined(_WIN32) || defined(OS2) || defined(MSDOS)
+#if defined(_WIN32) || defined(OS2) || defined(MSDOS) || defined(__CYGWIN__)
 #   include <fcntl.h>
 #   include <io.h>
 #   define SET_BINARY_MODE(file) setmode(fileno(file),O_BINARY)
diff -urN bzip2-1.0.6/bzlib.h bzip2-1.0.6/bzlib.h
--- bzip2-1.0.6/bzlib.h	2010-09-10 19:08:42.000000000 -0400
+++ bzip2-1.0.6/bzlib.h	2011-05-20 22:38:02.807325100 -0400
@@ -75,21 +75,39 @@
 #include <stdio.h>
 #endif
 
-#ifdef _WIN32
+#if defined(_WIN32) && !defined(__CYGWIN__)
 #   include <windows.h>
 #   ifdef small
       /* windows.h define small to char */
 #      undef small
 #   endif
-#   ifdef BZ_EXPORT
-#   define BZ_API(func) WINAPI func
-#   define BZ_EXTERN extern
+#   ifndef __GNUC__
+       /* Use these rules only for non-gcc native win32 */
+#      ifdef BZ_EXPORT
+#      define BZ_API(func) WINAPI func
+#      define BZ_EXTERN extern
+#      else
+       /* import windows dll dynamically */
+#      define BZ_API(func) (WINAPI * func)
+#      define BZ_EXTERN
+#      endif
 #   else
-   /* import windows dll dynamically */
-#   define BZ_API(func) (WINAPI * func)
-#   define BZ_EXTERN
+       /* For gcc on native win32, use import library trampoline       */
+       /* functions on DLL import.  This avoids requiring clients to   */
+       /* use special compilation flags depending on whether eventual  */
+       /* link will be against static libbz2 or against DLL, at the    */
+       /* expense of a small loss of efficiency. */
+
+       /* Because libbz2 does not export any DATA items, GNU ld's      */
+       /* "auto-import" is not a factor; the MinGW-built DLL can be    */
+       /* used by other compilers, provided an import library suitable */
+       /* for that compiler is (manually) constructed using the .def   */
+       /* file and the appropriate tool. */
+#      define BZ_API(func) func
+#      define BZ_EXTERN extern
 #   endif
 #else
+    /* non-win32 platforms, and cygwin */
 #   define BZ_API(func) func
 #   define BZ_EXTERN extern
 #endif
diff -urN bzip2-1.0.6/bzmore bzip2-1.0.6/bzmore
--- bzip2-1.0.6/bzmore	2007-01-02 21:00:55.000000000 -0500
+++ bzip2-1.0.6/bzmore	2011-05-20 21:21:39.540325100 -0400
@@ -24,10 +24,10 @@
   # 'stty min 1' resets eof to ^a on both SunOS and SysV!
   cb='min 1 -icanon'; ncb='icanon eof ^d'
 fi
-if test $? -eq 0 -a -n "$oldtty"; then
-   trap 'stty $oldtty 2>/dev/null; exit' 0 2 3 5 10 13 15
+if test $? -eq 0 && test -n "$oldtty"; then
+   trap 'stty $oldtty 2>/dev/null; exit' 0 INT QUIT TRAP USR1 PIPE TERM
 else
-   trap 'stty $ncb echo 2>/dev/null; exit' 0 2 3 5 10 13 15
+   trap 'stty $ncb echo 2>/dev/null; exit' 0 INT QUIT TRAP USR1 PIPE TERM
 fi
 
 if test $# = 0; then
@@ -46,7 +46,7 @@
 		ANS=`dd bs=1 count=1 2>/dev/null` 
 		stty $ncb echo 2>/dev/null
 		echo " "
-		if test "$ANS" = 'e' -o "$ANS" = 'q'; then
+		if test "$ANS" = 'e' || test "$ANS" = 'q'; then
 			exit
 		fi
 	fi
