]> git.saurik.com Git - wxWidgets.git/blobdiff - src/unix/dir.cpp
Ensure there is valid context for DrawRectangle
[wxWidgets.git] / src / unix / dir.cpp
index 31270d04a562d78569fbe871e4b26d52cad55220..2924741545652a961e616360d0e390e274d97735 100644 (file)
@@ -1,5 +1,5 @@
 /////////////////////////////////////////////////////////////////////////////
 /////////////////////////////////////////////////////////////////////////////
-// Name:        unix/dir.cpp
+// Name:        src/unix/dir.cpp
 // Purpose:     wxDir implementation for Unix/POSIX systems
 // Author:      Vadim Zeitlin
 // Modified by:
 // Purpose:     wxDir implementation for Unix/POSIX systems
 // Author:      Vadim Zeitlin
 // Modified by:
@@ -31,6 +31,7 @@
 
 #include "wx/dir.h"
 #include "wx/filefn.h"          // for wxMatchWild
 
 #include "wx/dir.h"
 #include "wx/filefn.h"          // for wxMatchWild
+#include "wx/filename.h"
 
 #include <sys/types.h>
 #include <sys/stat.h>
 
 #include <sys/types.h>
 #include <sys/stat.h>
@@ -149,13 +150,20 @@ bool wxDirData::Read(wxString *filename)
             break;
         }
 
             break;
         }
 
-        // check the type now
-        if ( !(m_flags & wxDIR_FILES) && !wxDir::Exists(path + de_d_name) )
+        // check the type now: notice that we may want to check the type of
+        // the path itself and not whatever it points to in case of a symlink
+        wxFileName fn = wxFileName::DirName(path + de_d_name);
+        if ( m_flags & wxDIR_NO_FOLLOW )
+        {
+            fn.DontFollowLink();
+        }
+
+        if ( !(m_flags & wxDIR_FILES) && !fn.DirExists() )
         {
             // it's a file, but we don't want them
             continue;
         }
         {
             // it's a file, but we don't want them
             continue;
         }
-        else if ( !(m_flags & wxDIR_DIRS) && wxDir::Exists(path + de_d_name) )
+        else if ( !(m_flags & wxDIR_DIRS) && fn.DirExists() )
         {
             // it's a dir, and we don't want it
             continue;
         {
             // it's a dir, and we don't want it
             continue;
@@ -197,16 +205,6 @@ bool wxDirData::Read(wxString * WXUNUSED(filename))
 
 #endif // not or new VMS/old VMS
 
 
 #endif // not or new VMS/old VMS
 
-// ----------------------------------------------------------------------------
-// wxDir helpers
-// ----------------------------------------------------------------------------
-
-/* static */
-bool wxDir::Exists(const wxString& dir)
-{
-    return wxDirExists(dir);
-}
-
 // ----------------------------------------------------------------------------
 // wxDir construction/destruction
 // ----------------------------------------------------------------------------
 // ----------------------------------------------------------------------------
 // wxDir construction/destruction
 // ----------------------------------------------------------------------------
@@ -245,19 +243,26 @@ wxString wxDir::GetName() const
     if ( m_data )
     {
         name = M_DIR->GetName();
     if ( m_data )
     {
         name = M_DIR->GetName();
-        if ( !name.empty() && (name.Last() == wxT('/')) )
+
+        // Notice that we need to check for length > 1 as we shouldn't remove
+        // the last slash from the root directory!
+        if ( name.length() > 1 && (name.Last() == wxT('/')) )
         {
         {
-            // chop off the last (back)slash
-            name.Truncate(name.length() - 1);
+            // chop off the last slash
+            name.RemoveLast();
         }
     }
 
     return name;
 }
 
         }
     }
 
     return name;
 }
 
-wxDir::~wxDir()
+void wxDir::Close()
 {
 {
-    delete M_DIR;
+    if ( m_data )
+    {
+        delete m_data;
+        m_data = NULL;
+    }
 }
 
 // ----------------------------------------------------------------------------
 }
 
 // ----------------------------------------------------------------------------
@@ -304,7 +309,7 @@ bool wxDir::HasSubDirs(const wxString& spec) const
         // caller will learn it soon enough when it calls GetFirst(wxDIR)
         // anyhow
         wxStructStat stBuf;
         // caller will learn it soon enough when it calls GetFirst(wxDIR)
         // anyhow
         wxStructStat stBuf;
-        if ( wxStat(M_DIR->GetName().c_str(), &stBuf) == 0 )
+        if ( wxStat(M_DIR->GetName(), &stBuf) == 0 )
         {
             switch ( stBuf.st_nlink )
             {
         {
             switch ( stBuf.st_nlink )
             {