Add wxDIR_NO_FOLLOW flag for wxDir iteration.
This flag allows to avoid following the symbolic links during the directory traversal. In particular, this means that links to the directories (potentially outside the directory being traversed) are not considered as directories at all when it is used, potentially avoiding surprises. Closes #14542. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@72740 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -531,6 +531,7 @@ All:
|
|||||||
|
|
||||||
- Add wxEvtHandler::CallAfter() method for asynchronous method calls.
|
- Add wxEvtHandler::CallAfter() method for asynchronous method calls.
|
||||||
- Add support for symlinks to wxFileName (David Hart).
|
- Add support for symlinks to wxFileName (David Hart).
|
||||||
|
- Add wxDIR_NO_FOLLOW flag for wxDir traversal (David Hart).
|
||||||
- Allow testing for symlink/FIFO/socket existence in wxFileName (David Hart).
|
- Allow testing for symlink/FIFO/socket existence in wxFileName (David Hart).
|
||||||
- Many important bug fixes in wxFileSystemWatcher (David Hart).
|
- Many important bug fixes in wxFileSystemWatcher (David Hart).
|
||||||
- Add separate read/written bytes counters and per-direction NOWAIT and WAITALL
|
- Add separate read/written bytes counters and per-direction NOWAIT and WAITALL
|
||||||
|
@@ -22,14 +22,17 @@ class WXDLLIMPEXP_FWD_BASE wxArrayString;
|
|||||||
// constants
|
// constants
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
// these flags define what kind of filenames is included in the list of files
|
// These flags affect the behaviour of GetFirst/GetNext() and Traverse().
|
||||||
// enumerated by GetFirst/GetNext
|
// They define what types are included in the list of items they produce.
|
||||||
|
// Note that wxDIR_NO_FOLLOW is relevant only on Unix and ignored under systems
|
||||||
|
// not supporting symbolic links.
|
||||||
enum wxDirFlags
|
enum wxDirFlags
|
||||||
{
|
{
|
||||||
wxDIR_FILES = 0x0001, // include files
|
wxDIR_FILES = 0x0001, // include files
|
||||||
wxDIR_DIRS = 0x0002, // include directories
|
wxDIR_DIRS = 0x0002, // include directories
|
||||||
wxDIR_HIDDEN = 0x0004, // include hidden files
|
wxDIR_HIDDEN = 0x0004, // include hidden files
|
||||||
wxDIR_DOTDOT = 0x0008, // include '.' and '..'
|
wxDIR_DOTDOT = 0x0008, // include '.' and '..'
|
||||||
|
wxDIR_NO_FOLLOW = 0x0010, // don't dereference any symlink
|
||||||
|
|
||||||
// by default, enumerate everything except '.' and '..'
|
// by default, enumerate everything except '.' and '..'
|
||||||
wxDIR_DEFAULT = wxDIR_FILES | wxDIR_DIRS | wxDIR_HIDDEN
|
wxDIR_DEFAULT = wxDIR_FILES | wxDIR_DIRS | wxDIR_HIDDEN
|
||||||
|
@@ -94,8 +94,8 @@ public:
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
These flags define what kind of filenames are included in the list of files
|
These flags affect the behaviour of GetFirst/GetNext() and Traverse(),
|
||||||
enumerated by wxDir::GetFirst() and wxDir::GetNext().
|
determining what types are included in the list of items they produce.
|
||||||
*/
|
*/
|
||||||
enum wxDirFlags
|
enum wxDirFlags
|
||||||
{
|
{
|
||||||
@@ -104,8 +104,28 @@ enum wxDirFlags
|
|||||||
wxDIR_HIDDEN = 0x0004, ///< Includes hidden files.
|
wxDIR_HIDDEN = 0x0004, ///< Includes hidden files.
|
||||||
wxDIR_DOTDOT = 0x0008, ///< Includes "." and "..".
|
wxDIR_DOTDOT = 0x0008, ///< Includes "." and "..".
|
||||||
|
|
||||||
//! Combination of the @c wxDIR_FILES, @c wxDIR_DIRS, @c wxDIR_HIDDEN flags
|
/**
|
||||||
//! defined above.
|
Don't follow symbolic links during the directory traversal.
|
||||||
|
|
||||||
|
This flag is ignored under systems not supporting symbolic links (i.e.
|
||||||
|
non-Unix ones).
|
||||||
|
|
||||||
|
Notice that this flag is @e not included in wxDIR_DEFAULT and so the
|
||||||
|
default behaviour of wxDir::Traverse() is to follow symbolic links,
|
||||||
|
even if they lead outside of the directory being traversed.
|
||||||
|
|
||||||
|
@since 2.9.5
|
||||||
|
*/
|
||||||
|
wxDIR_NO_FOLLOW = 0x0010,
|
||||||
|
|
||||||
|
/**
|
||||||
|
Default directory traversal flags include both files and directories,
|
||||||
|
even hidden.
|
||||||
|
|
||||||
|
Notice that by default wxDIR_NO_FOLLOW is @e not included, meaning that
|
||||||
|
symbolic links are followed by default. If this is not desired, you
|
||||||
|
must pass that flag explicitly.
|
||||||
|
*/
|
||||||
wxDIR_DEFAULT = wxDIR_FILES | wxDIR_DIRS | wxDIR_HIDDEN
|
wxDIR_DEFAULT = wxDIR_FILES | wxDIR_DIRS | wxDIR_HIDDEN
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -150,10 +150,13 @@ bool wxDirData::Read(wxString *filename)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
// check the type now: notice that we want to check the type of this
|
// check the type now: notice that we may want to check the type of
|
||||||
// path itself and not whatever it points to in case of a symlink
|
// the path itself and not whatever it points to in case of a symlink
|
||||||
wxFileName fn = wxFileName::DirName(path + de_d_name);
|
wxFileName fn = wxFileName::DirName(path + de_d_name);
|
||||||
fn.DontFollowLink();
|
if ( m_flags & wxDIR_NO_FOLLOW )
|
||||||
|
{
|
||||||
|
fn.DontFollowLink();
|
||||||
|
}
|
||||||
|
|
||||||
if ( !(m_flags & wxDIR_FILES) && !fn.DirExists() )
|
if ( !(m_flags & wxDIR_FILES) && !fn.DirExists() )
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user