]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/dircmn.cpp
Rewind the input stream after failing to load image from it.
[wxWidgets.git] / src / common / dircmn.cpp
index 6549a4ae5f1ccedcbed8b340a63995629f9440ca..f5b0c9fe8a824b4c2f958312847dba67d8806976 100644 (file)
@@ -6,7 +6,7 @@
 // Created:     19.05.01
 // RCS-ID:      $Id$
 // Copyright:   (c) 2001 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr>
-// License:     wxWindows licence
+// Licence:     wxWindows licence
 ///////////////////////////////////////////////////////////////////////////////
 
 // ============================================================================
@@ -35,9 +35,6 @@
 #include "wx/dir.h"
 #include "wx/filename.h"
 
-// error code of wxFileName::GetSize()
-extern wxULongLong wxInvalidSize;
-
 // ============================================================================
 // implementation
 // ============================================================================
@@ -58,16 +55,16 @@ wxDirTraverser::OnOpenError(const wxString& WXUNUSED(dirname))
 
 // dumb generic implementation
 
-bool wxDir::HasFiles(const wxString& spec)
+bool wxDir::HasFiles(const wxString& spec) const
 {
     wxString s;
     return GetFirst(&s, spec, wxDIR_FILES | wxDIR_HIDDEN);
 }
 
 // we have a (much) faster version for Unix
-#if (defined(__CYGWIN__) && defined(__WINDOWS__)) || !defined(__UNIX_LIKE__) || defined(__WXMAC__) || defined(__EMX__) || defined(__WINE__)
+#if (defined(__CYGWIN__) && defined(__WINDOWS__)) || !defined(__UNIX_LIKE__) || defined(__EMX__) || defined(__WINE__)
 
-bool wxDir::HasSubDirs(const wxString& spec)
+bool wxDir::HasSubDirs(const wxString& spec) const
 {
     wxString s;
     return GetFirst(&s, spec, wxDIR_DIRS | wxDIR_HIDDEN);
@@ -84,7 +81,7 @@ size_t wxDir::Traverse(wxDirTraverser& sink,
                        int flags) const
 {
     wxCHECK_MSG( IsOpened(), (size_t)-1,
-                 _T("dir must be opened before traversing it") );
+                 wxT("dir must be opened before traversing it") );
 
     // the total number of files found
     size_t nFiles = 0;
@@ -106,7 +103,7 @@ size_t wxDir::Traverse(wxDirTraverser& sink,
             switch ( sink.OnDir(fulldirname) )
             {
                 default:
-                    wxFAIL_MSG(_T("unexpected OnDir() return value") );
+                    wxFAIL_MSG(wxT("unexpected OnDir() return value") );
                     // fall through
 
                 case wxDIR_STOP:
@@ -134,7 +131,7 @@ size_t wxDir::Traverse(wxDirTraverser& sink,
                                 switch ( sink.OnOpenError(fulldirname) )
                                 {
                                     default:
-                                        wxFAIL_MSG(_T("unexpected OnOpenError() return value") );
+                                        wxFAIL_MSG(wxT("unexpected OnOpenError() return value") );
                                         // fall through
 
                                     case wxDIR_STOP:
@@ -183,7 +180,7 @@ size_t wxDir::Traverse(wxDirTraverser& sink,
                 break;
 
             wxASSERT_MSG( res == wxDIR_CONTINUE,
-                          _T("unexpected OnFile() return value") );
+                          wxT("unexpected OnFile() return value") );
 
             nFiles++;
 
@@ -217,7 +214,7 @@ public:
 private:
     wxArrayString& m_files;
 
-    DECLARE_NO_COPY_CLASS(wxDirTraverserSimple)
+    wxDECLARE_NO_COPY_CLASS(wxDirTraverserSimple);
 };
 
 /* static */
@@ -226,7 +223,7 @@ size_t wxDir::GetAllFiles(const wxString& dirname,
                           const wxString& filespec,
                           int flags)
 {
-    wxCHECK_MSG( files, (size_t)-1, _T("NULL pointer in wxDir::GetAllFiles") );
+    wxCHECK_MSG( files, (size_t)-1, wxT("NULL pointer in wxDir::GetAllFiles") );
 
     size_t nFiles = 0;
 
@@ -269,7 +266,7 @@ public:
 private:
     wxString m_file;
 
-    DECLARE_NO_COPY_CLASS(wxDirTraverserFindFirst)
+    wxDECLARE_NO_COPY_CLASS(wxDirTraverserFindFirst);
 };
 
 /* static */
@@ -294,6 +291,8 @@ wxString wxDir::FindFirst(const wxString& dirname,
 // wxDir::GetTotalSize()
 // ----------------------------------------------------------------------------
 
+#if wxUSE_LONGLONG
+
 class wxDirTraverserSumSize : public wxDirTraverser
 {
 public:
@@ -301,11 +300,11 @@ public:
 
     virtual wxDirTraverseResult OnFile(const wxString& filename)
     {
-        wxULongLong sz = wxFileName::GetSize(filename);
-
         // wxFileName::GetSize won't use this class again as
         // we're passing it a file and not a directory;
         // thus we are sure to avoid an endless loop
+        wxULongLong sz = wxFileName::GetSize(filename);
+
         if (sz == wxInvalidSize)
         {
             // if the GetSize() failed (this can happen because e.g. a
@@ -328,7 +327,7 @@ public:
 
     wxULongLong GetTotalSize() const
         { return m_sz; }
-    wxArrayString &FilesSkipped()
+    const wxArrayString& GetSkippedFiles() const
         { return m_skippedFiles; }
 
 protected:
@@ -348,13 +347,36 @@ wxULongLong wxDir::GetTotalSize(const wxString &dirname, wxArrayString *filesSki
         return wxInvalidSize;
 
     wxDirTraverserSumSize traverser;
-    if (dir.Traverse(traverser) == (size_t)-1 ||
-        traverser.GetTotalSize() == 0)
+    if (dir.Traverse(traverser) == (size_t)-1 )
         return wxInvalidSize;
 
     if (filesSkipped)
-        *filesSkipped = traverser.FilesSkipped();
+        *filesSkipped = traverser.GetSkippedFiles();
 
     return traverser.GetTotalSize();
 }
 
+#endif // wxUSE_LONGLONG
+
+// ----------------------------------------------------------------------------
+// wxDir helpers
+// ----------------------------------------------------------------------------
+
+/* static */
+bool wxDir::Exists(const wxString& dir)
+{
+    return wxFileName::DirExists(dir);
+}
+
+/* static */
+bool wxDir::Make(const wxString &dir, int perm, int flags)
+{
+    return wxFileName::Mkdir(dir, perm, flags);
+}
+
+/* static */
+bool wxDir::Remove(const wxString &dir, int flags)
+{
+    return wxFileName::Rmdir(dir, flags);
+}
+