X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/509201463dbd3bce8aff762c664b111a8f2c3412..8bedcdce08e1575b74250d2ebac4355a687ccf8d:/src/common/file.cpp diff --git a/src/common/file.cpp b/src/common/file.cpp index 5cf0152d8a..8f1f1deb76 100644 --- a/src/common/file.cpp +++ b/src/common/file.cpp @@ -20,14 +20,15 @@ // For compilers that support precompilation, includes "wx.h". #include "wx/wxprec.h" -#include "wx/defs.h" #ifdef __BORLANDC__ - #pragma hdrstop + #pragma hdrstop #endif +#if wxUSE_FILE + // standard -#if defined(__WXMSW__) && !defined(__GNUWIN32__) +#if defined(__WXMSW__) && !defined(__GNUWIN32__) && !defined(__WXWINE__) #include #ifndef __SALFORDC__ @@ -160,7 +161,7 @@ bool wxFile::Exists(const wxChar *name) { struct stat st; #if wxUSE_UNICODE && wxMBFILES - wxCharBuffer fname = wxConv_file.cWC2MB(name); + wxCharBuffer fname = wxConvFile.cWC2MB(name); return !access(fname, 0) && !stat(MBSTRINGCAST fname, &st) && @@ -502,6 +503,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 +514,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; @@ -564,3 +574,5 @@ void wxTempFile::Discard() if ( remove(m_strTemp.fn_str()) != 0 ) wxLogSysError(_("can't remove temporary file '%s'"), m_strTemp.c_str()); } + +#endif \ No newline at end of file