Blob Blame History Raw
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;