diff -up unix2dos-2.2/unix2dos.c~ unix2dos-2.2/unix2dos.c --- unix2dos-2.2/unix2dos.c~ 2008-03-03 13:16:34.000000000 +0000 +++ unix2dos-2.2/unix2dos.c 2008-03-03 13:22:10.000000000 +0000 @@ -244,10 +244,11 @@ int ConvertUnixToDosNewFile(char *ipInFN char *TempPath; struct stat StatBuf; struct utimbuf UTimeBuf; + mode_t mask; int fd; /* retrieve ipInFN file date stamp */ - if ((ipFlag->KeepDate) && stat(ipInFN, &StatBuf)) + if (stat(ipInFN, &StatBuf)) RetVal = -1; if((fd = MakeTempFileFrom (ipOutFN, &TempPath)) < 0) { @@ -271,6 +272,12 @@ int ConvertUnixToDosNewFile(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) && (ConvertUnixToDos(InF, TempF, ipFlag))) RetVal = -1;