X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/509201463dbd3bce8aff762c664b111a8f2c3412..c3317e87ec1795b8471e684f06e5366ec6f645a2:/src/common/file.cpp diff --git a/src/common/file.cpp b/src/common/file.cpp index 5cf0152d8a..3cd684587a 100644 --- a/src/common/file.cpp +++ b/src/common/file.cpp @@ -502,6 +502,9 @@ bool wxTempFile::Open(const wxString& strName) int access = wxS_DEFAULT; #ifdef __UNIX__ // create the file with the same mode as the original one under Unix + mode_t umaskOld = 0; // just to suppress compiler warning + bool changedUmask; + struct stat st; if ( stat(strName.fn_str(), &st) == 0 ) { @@ -510,22 +513,28 @@ bool wxTempFile::Open(const wxString& strName) // macros, so should not be less portable than using (not POSIX) // S_IFREG &c access = st.st_mode & 0777; + + // we want to create the file with exactly the same access rights as + // the original one, so disable the user's umask for the moment + umaskOld = umask(0); + changedUmask = TRUE; } else { - wxLogLastError(_T("stat")); + // file probably didn't exist, just create with default mode _using_ + // user's umask (new files creation should respet umask) + changedUmask = FALSE; } - - // we want to create the file with exactly the same access rights as the - // original one, so disable the user's umask for the moment - mode_t umaskOld = umask(0); #endif // Unix - bool ok = m_file.Open(m_strTemp, wxFile::write, access); + bool ok = m_file.Open(m_strTemp, wxFile::write, access); #ifdef __UNIX__ - // restore umask now that the file is created - (void)umask(umaskOld); + if ( changedUmask ) + { + // restore umask now that the file is created + (void)umask(umaskOld); + } #endif // Unix return ok;