added wxUmaskChanger class and wxCHANGE_UMASK macro and use them instead of duplicating the same umask-setting code in several places
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@29629 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
parent
a761df69a3
commit
8482e4bdb9
@ -31,6 +31,7 @@ the corresponding topic.
|
|||||||
\helpref{wxBITMAP}{wxbitmapmacro}\\
|
\helpref{wxBITMAP}{wxbitmapmacro}\\
|
||||||
\helpref{wxBeginBusyCursor}{wxbeginbusycursor}\\
|
\helpref{wxBeginBusyCursor}{wxbeginbusycursor}\\
|
||||||
\helpref{wxBell}{wxbell}\\
|
\helpref{wxBell}{wxbell}\\
|
||||||
|
\helpref{wxCHANGE\_UMASK}{wxchangeumask}\\
|
||||||
\helpref{wxCHECK}{wxcheck}\\
|
\helpref{wxCHECK}{wxcheck}\\
|
||||||
\helpref{wxCHECK2\_MSG}{wxcheck2msg}\\
|
\helpref{wxCHECK2\_MSG}{wxcheck2msg}\\
|
||||||
\helpref{wxCHECK2}{wxcheck2}\\
|
\helpref{wxCHECK2}{wxcheck2}\\
|
||||||
@ -890,7 +891,7 @@ threads.
|
|||||||
|
|
||||||
\wxheading{Include files}
|
\wxheading{Include files}
|
||||||
|
|
||||||
<wx/utils.h>
|
<wx/filefn.h>
|
||||||
|
|
||||||
\wxheading{See also}
|
\wxheading{See also}
|
||||||
|
|
||||||
@ -1032,6 +1033,18 @@ Converts a Unix to a DOS filename by replacing forward
|
|||||||
slashes with backslashes.
|
slashes with backslashes.
|
||||||
|
|
||||||
|
|
||||||
|
\membersection{wxCHANGE\_UMASK}\label{wxchangeumask}
|
||||||
|
|
||||||
|
\func{}{wxCHANGE\_UMASK}{\param{int }{mask}}
|
||||||
|
|
||||||
|
Under Unix this macro changes the current process umask to the given value,
|
||||||
|
unless it is equal to $-1$ in which case nothing is done, and restores it to
|
||||||
|
the original value on scope exit. It works by declaring a variable which sets
|
||||||
|
umask to \arg{mask} in its constructor and restores it in its destructor.
|
||||||
|
|
||||||
|
Under other platforms this macro expands to nothing.
|
||||||
|
|
||||||
|
|
||||||
\membersection{::wxConcatFiles}\label{wxconcatfiles}
|
\membersection{::wxConcatFiles}\label{wxconcatfiles}
|
||||||
|
|
||||||
\func{bool}{wxConcatFiles}{\param{const wxString\& }{file1}, \param{const wxString\& }{file2},
|
\func{bool}{wxConcatFiles}{\param{const wxString\& }{file1}, \param{const wxString\& }{file2},
|
||||||
|
@ -549,6 +549,41 @@ WXDLLIMPEXP_BASE int wxParseCommonDialogsFilter(const wxString& wildCard, wxArra
|
|||||||
// classes
|
// classes
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
#ifdef __UNIX__
|
||||||
|
|
||||||
|
// set umask to the given value in ctor and reset it to the old one in dtor
|
||||||
|
class WXDLLIMPEXP_BASE wxUmaskChanger
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
// change the umask to the given one if it is not -1: this allows to write
|
||||||
|
// the same code whether you really want to change umask or not, as is in
|
||||||
|
// wxFileConfig::Flush() for example
|
||||||
|
wxUmaskChanger(int umaskNew)
|
||||||
|
{
|
||||||
|
m_umaskOld = umaskNew == -1 ? -1 : umask((mode_t)umaskNew);
|
||||||
|
}
|
||||||
|
|
||||||
|
~wxUmaskChanger()
|
||||||
|
{
|
||||||
|
if ( m_umaskOld != -1 )
|
||||||
|
umask((mode_t)m_umaskOld);
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
int m_umaskOld;
|
||||||
|
};
|
||||||
|
|
||||||
|
// this macro expands to an "anonymous" wxUmaskChanger object under Unix and
|
||||||
|
// nothing elsewhere
|
||||||
|
#define wxCHANGE_UMASK(m) wxUmaskChanger wxMAKE_UNIQUE_NAME(umaskChanger_)(m)
|
||||||
|
|
||||||
|
#else // !__UNIX__
|
||||||
|
|
||||||
|
#define wxCHANGE_UMASK(m)
|
||||||
|
|
||||||
|
#endif // __UNIX__/!__UNIX__
|
||||||
|
|
||||||
|
|
||||||
// Path searching
|
// Path searching
|
||||||
class WXDLLIMPEXP_BASE wxPathList : public wxStringList
|
class WXDLLIMPEXP_BASE wxPathList : public wxStringList
|
||||||
{
|
{
|
||||||
|
@ -39,6 +39,7 @@
|
|||||||
#include "wx/memtext.h"
|
#include "wx/memtext.h"
|
||||||
#include "wx/config.h"
|
#include "wx/config.h"
|
||||||
#include "wx/fileconf.h"
|
#include "wx/fileconf.h"
|
||||||
|
#include "wx/filefn.h"
|
||||||
|
|
||||||
#if wxUSE_STREAMS
|
#if wxUSE_STREAMS
|
||||||
#include "wx/stream.h"
|
#include "wx/stream.h"
|
||||||
@ -61,12 +62,6 @@
|
|||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
|
|
||||||
// headers needed for umask()
|
|
||||||
#ifdef __UNIX__
|
|
||||||
#include <sys/types.h>
|
|
||||||
#include <sys/stat.h>
|
|
||||||
#endif // __UNIX__
|
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
// macros
|
// macros
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
@ -965,14 +960,8 @@ bool wxFileConfig::Flush(bool /* bCurrentOnly */)
|
|||||||
if ( LineListIsEmpty() || !m_pRootGroup->IsDirty() || !m_strLocalFile )
|
if ( LineListIsEmpty() || !m_pRootGroup->IsDirty() || !m_strLocalFile )
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
#ifdef __UNIX__
|
|
||||||
// set the umask if needed
|
// set the umask if needed
|
||||||
mode_t umaskOld = 0;
|
wxCHANGE_UMASK(m_umask);
|
||||||
if ( m_umask != -1 )
|
|
||||||
{
|
|
||||||
umaskOld = umask((mode_t)m_umask);
|
|
||||||
}
|
|
||||||
#endif // __UNIX__
|
|
||||||
|
|
||||||
wxTempFile file(m_strLocalFile);
|
wxTempFile file(m_strLocalFile);
|
||||||
|
|
||||||
@ -1016,14 +1005,6 @@ bool wxFileConfig::Flush(bool /* bCurrentOnly */)
|
|||||||
}
|
}
|
||||||
#endif // __WXMAC__
|
#endif // __WXMAC__
|
||||||
|
|
||||||
#ifdef __UNIX__
|
|
||||||
// restore the old umask if we changed it
|
|
||||||
if ( m_umask != -1 )
|
|
||||||
{
|
|
||||||
(void)umask(umaskOld);
|
|
||||||
}
|
|
||||||
#endif // __UNIX__
|
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1021,11 +1021,9 @@ wxCopyFile (const wxString& file1, const wxString& file2, bool overwrite)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef __UNIX__
|
|
||||||
// reset the umask as we want to create the file with exactly the same
|
// reset the umask as we want to create the file with exactly the same
|
||||||
// permissions as the original one
|
// permissions as the original one
|
||||||
mode_t oldUmask = umask( 0 );
|
wxCHANGE_UMASK(0);
|
||||||
#endif // __UNIX__
|
|
||||||
|
|
||||||
// create file2 with the same permissions than file1 and open it for
|
// create file2 with the same permissions than file1 and open it for
|
||||||
// writing
|
// writing
|
||||||
@ -1034,11 +1032,6 @@ wxCopyFile (const wxString& file1, const wxString& file2, bool overwrite)
|
|||||||
if ( !fileOut.Create(file2, overwrite, fbuf.st_mode & 0777) )
|
if ( !fileOut.Create(file2, overwrite, fbuf.st_mode & 0777) )
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
#ifdef __UNIX__
|
|
||||||
/// restore the old umask
|
|
||||||
umask(oldUmask);
|
|
||||||
#endif // __UNIX__
|
|
||||||
|
|
||||||
// copy contents of file1 to file2
|
// copy contents of file1 to file2
|
||||||
char buf[4096];
|
char buf[4096];
|
||||||
size_t count;
|
size_t count;
|
||||||
|
Loading…
Reference in New Issue
Block a user