diff -up dos2unix-4.1.1/dos2unix.c.preserve-file-modes dos2unix-4.1.1/dos2unix.c
--- dos2unix-4.1.1/dos2unix.c.preserve-file-modes 2010-01-10 21:02:18.000000000 +0000
+++ dos2unix-4.1.1/dos2unix.c 2010-01-22 09:55:48.870058072 +0000
@@ -472,6 +472,7 @@ int ConvertDosToUnixNewFile(char *ipInFN
char *TempPath;
struct stat StatBuf;
struct utimbuf UTimeBuf;
+ mode_t mask;
#ifdef NO_MKSTEMP
FILE* fd;
#else
@@ -487,7 +488,7 @@ int ConvertDosToUnixNewFile(char *ipInFN
ipFlag->status = 0 ;
/* retrieve ipInFN file date stamp */
- if ((ipFlag->KeepDate) && stat(ipInFN, &StatBuf))
+ if (stat(ipInFN, &StatBuf))
RetVal = -1;
#ifdef NO_MKSTEMP
@@ -519,6 +520,12 @@ int ConvertDosToUnixNewFile(char *ipInFN
RetVal = -1;
}
+ /* preserve original mode as modified by umask */
+ mask = umask(0);
+ umask(mask);
+ if (!RetVal && fchmod(fd, StatBuf.st_mode & ~mask))
+ RetVal = -1;
+
/* conversion sucessful? */
if ((!RetVal) && (ConvertDosToUnix(InF, TempF, ipFlag)))
RetVal = -1;