]> git.saurik.com Git - wxWidgets.git/blobdiff - src/os2/dir.cpp
Explicitly unregister custom wxWebViewIE namespaces when we are done with them. Also...
[wxWidgets.git] / src / os2 / dir.cpp
index c5a14f2ce3494faeb1e849af0f7293b15b02df6b..2b08bac7d17e72f03a985390d93f5f3ddc768c6d 100644 (file)
@@ -1,12 +1,12 @@
 /////////////////////////////////////////////////////////////////////////////
-// Name:        os2/dir.cpp
+// Name:        src/os2/dir.cpp
 // Purpose:     wxDir implementation for OS/2
 // Author:      Vadim Zeitlin
 // Modified by: Stefan Neis
 // Created:     08.12.99
 // RCS-ID:      $Id$
 // Copyright:   (c) 1999 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr>
-// Licence:     wxWindows license
+// Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
 // ============================================================================
 // headers
 // ----------------------------------------------------------------------------
 
-#ifdef __GNUG__
-    #pragma implementation "dir.h"
-#endif
-
 // For compilers that support precompilation, includes "wx.h".
 #include "wx/wxprec.h"
 
 #ifndef WX_PRECOMP
+    #include "wx/os2/private.h"
     #include "wx/intl.h"
     #include "wx/log.h"
 #endif // PCH
@@ -35,6 +32,7 @@
 #include <sys/types.h>
 
 #define INCL_DOSFILEMGR
+#define INCL_DOSERRORS
 #include <os2.h>
 
 #ifdef __EMX__
@@ -64,7 +62,7 @@ static inline void FreeFindData(
 {
     if (!::DosFindClose(vFd))
     {
-        wxLogLastError(_T("DosFindClose"));
+        wxLogLastError(wxT("DosFindClose"));
     }
 }
 
@@ -74,19 +72,19 @@ static inline FIND_DATA FindFirst(
 )
 {
     ULONG                       ulFindCount = 1;
-    FIND_DATA                   hDir;
+    FIND_DATA                   hDir = HDIR_CREATE;
     FIND_ATTR                   rc;
 
     rc = ::DosFindFirst( rsSpec.c_str()
                         ,&hDir
-                        ,FILE_NORMAL
+                        ,0x37 // was: FILE_NORMAL
                         ,pFinddata
                         ,sizeof(FILEFINDBUF3)
                         ,&ulFindCount
                         ,FIL_STANDARD
                        );
     if (rc != 0)
-        return 0;
+        return InitFindData();
     return hDir;
 }
 
@@ -101,14 +99,14 @@ static inline bool FindNext(
                          ,pFinddata
                          ,sizeof(FILEFINDBUF3)
                          ,&ulFindCount
-                         ) != 0;
+                         ) == 0;
 }
 
 static const wxChar* GetNameFromFindData(
   FIND_STRUCT*                      pFinddata
 )
 {
-    return pFinddata->achName;
+    return (wxChar*)pFinddata->achName;
 }
 
 static const FIND_ATTR GetAttrFromFindData(
@@ -160,6 +158,7 @@ public:
     void SetFileSpec(const wxString& rsFilespec) { m_sFilespec = rsFilespec; }
     void SetFlags(int nFlags) { m_nFlags = nFlags; }
 
+    const wxString& GetName() const { return m_sDirname; }
     void Close();
     void Rewind();
     bool Read(wxString* rsFilename);
@@ -210,7 +209,7 @@ bool wxDirData::Read(
   wxString*                         psFilename
 )
 {
-    bool                            bFirst = FALSE;
+    bool                            bFirst = false;
 
     FILEFINDBUF3                    vFinddata;
     #define PTR_TO_FINDDATA (&vFinddata)
@@ -224,19 +223,19 @@ bool wxDirData::Read(
 
         if ( !wxEndsWithPathSeparator(sFilespec) )
         {
-            sFilespec += _T('\\');
+            sFilespec += wxT('\\');
         }
-        sFilespec += (!m_sFilespec ? _T("*.*") : m_sFilespec.c_str());
+        sFilespec += (!m_sFilespec ? wxT("*.*") : m_sFilespec.c_str());
 
         m_vFinddata = FindFirst( sFilespec
                                 ,PTR_TO_FINDDATA
                                );
-        bFirst = TRUE;
+        bFirst = true;
     }
 
     if ( !IsFindDataOk(m_vFinddata) )
     {
-        return FALSE;
+        return false;
     }
 
     const wxChar*                   zName;
@@ -246,7 +245,7 @@ bool wxDirData::Read(
     {
         if (bFirst)
         {
-            bFirst = FALSE;
+            bFirst = false;
         }
         else
         {
@@ -254,7 +253,7 @@ bool wxDirData::Read(
                           ,PTR_TO_FINDDATA
                          ))
             {
-                return FALSE;
+                return false;
             }
         }
 
@@ -264,9 +263,9 @@ bool wxDirData::Read(
         //
         // Don't return "." and ".." unless asked for
         //
-        if ( zName[0] == _T('.') &&
-             ((zName[1] == _T('.') && zName[2] == _T('\0')) ||
-              (zName[1] == _T('\0'))) )
+        if ( zName[0] == wxT('.') &&
+             ((zName[1] == wxT('.') && zName[2] == wxT('\0')) ||
+              (zName[1] == wxT('\0'))) )
         {
             if (!(m_nFlags & wxDIR_DOTDOT))
                 continue;
@@ -306,21 +305,9 @@ bool wxDirData::Read(
         *psFilename = zName;
         break;
     }
-    return TRUE;
+    return true;
 } // end of wxDirData::Read
 
-// ----------------------------------------------------------------------------
-// wxDir helpers
-// ----------------------------------------------------------------------------
-
-/* static */
-bool wxDir::Exists(
-  const wxString&                   rsDir
-)
-{
-    return wxPathExists(rsDir);
-} // end of wxDir::Exists
-
 // ----------------------------------------------------------------------------
 // wxDir construction/destruction
 // ----------------------------------------------------------------------------
@@ -340,7 +327,7 @@ bool wxDir::Open(
 {
     delete M_DIR;
     m_data = new wxDirData(rsDirname);
-    return TRUE;
+    return true;
 } // end of wxDir::Open
 
 bool wxDir::IsOpened() const
@@ -348,6 +335,28 @@ bool wxDir::IsOpened() const
     return m_data != NULL;
 } // end of wxDir::IsOpen
 
+wxString wxDir::GetName() const
+{
+    wxString name;
+    if ( m_data )
+    {
+        name = M_DIR->GetName();
+        if ( !name.empty() )
+        {
+            // bring to canonical Windows form
+            name.Replace(wxT("/"), wxT("\\"));
+
+            if ( name.Last() == wxT('\\') )
+            {
+                // chop off the last (back)slash
+                name.Truncate(name.length() - 1);
+            }
+        }
+    }
+
+    return name;
+}
+
 wxDir::~wxDir()
 {
     delete M_DIR;
@@ -363,7 +372,7 @@ bool wxDir::GetFirst(
 , int                               nFlags
 ) const
 {
-    wxCHECK_MSG( IsOpened(), FALSE, _T("must wxDir::Open() first") );
+    wxCHECK_MSG( IsOpened(), false, wxT("must wxDir::Open() first") );
     M_DIR->Rewind();
     M_DIR->SetFileSpec(rsFilespec);
     M_DIR->SetFlags(nFlags);
@@ -374,8 +383,8 @@ bool wxDir::GetNext(
   wxString*                         psFilename
 ) const
 {
-    wxCHECK_MSG( IsOpened(), FALSE, _T("must wxDir::Open() first") );
-    wxCHECK_MSG( psFilename, FALSE, _T("bad pointer in wxDir::GetNext()") );
+    wxCHECK_MSG( IsOpened(), false, wxT("must wxDir::Open() first") );
+    wxCHECK_MSG( psFilename, false, wxT("bad pointer in wxDir::GetNext()") );
     return M_DIR->Read(psFilename);
 } // end of wxDir::GetNext