]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/filefn.cpp
Semicolon needed.
[wxWidgets.git] / src / common / filefn.cpp
index 779c4dfa28892e1c484f2012719983c570ec7022..5168a4cff508cfba6f64fd00f5d5d2e472a3a8e6 100644 (file)
@@ -1,5 +1,5 @@
 /////////////////////////////////////////////////////////////////////////////
-// Name:        filefn.cpp
+// Name:        src/common/filefn.cpp
 // Purpose:     File- and directory-related functions
 // Author:      Julian Smart
 // Modified by:
 // headers
 // ----------------------------------------------------------------------------
 
-#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
-    #pragma implementation "filefn.h"
-#endif
-
 // For compilers that support precompilation, includes "wx.h".
 #include "wx/wxprec.h"
 #include "wx/defs.h"
@@ -44,7 +40,7 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
-#if !defined(__WATCOMC__)
+#if !wxONLY_WATCOM_EARLIER_THAN(1,4)
     #if !(defined(_MSC_VER) && (_MSC_VER > 800))
         #include <errno.h>
     #endif
@@ -246,8 +242,7 @@ bool wxPathList::Member (const wxString& path)
 
 wxString wxPathList::FindValidPath (const wxString& file)
 {
-  if (wxFileExists (wxExpandPath(wxFileFunctionsBuffer, file)))
-    return wxString(wxFileFunctionsBuffer);
+  wxExpandPath(wxFileFunctionsBuffer, file);
 
   wxChar buf[_MAXPATHLEN];
   wxStrcpy(buf, wxFileFunctionsBuffer);
@@ -256,7 +251,7 @@ wxString wxPathList::FindValidPath (const wxString& file)
 
   for (wxStringList::compatibility_iterator node = GetFirst(); node; node = node->GetNext())
     {
-      const wxChar *path = node->GetData();
+      const wxString path(node->GetData());
       wxStrcpy (wxFileFunctionsBuffer, path);
       wxChar ch = wxFileFunctionsBuffer[wxStrlen(wxFileFunctionsBuffer)-1];
       if (ch != wxT('\\') && ch != wxT('/'))
@@ -280,8 +275,7 @@ wxString wxPathList::FindAbsoluteValidPath (const wxString& file)
     if ( f.empty() || wxIsAbsolutePath(f) )
         return f;
 
-    wxString buf;
-    wxGetWorkingDirectory(wxStringBuffer(buf, _MAXPATHLEN), _MAXPATHLEN);
+    wxString buf = ::wxGetCwd();
 
     if ( !wxEndsWithPathSeparator(buf) )
     {
@@ -306,7 +300,12 @@ wxFileExists (const wxString& filename)
 #else // !__WIN32__
     wxStructStat st;
 #ifndef wxNEED_WX_UNISTD_H
-    return wxStat( filename.fn_str() , &st) == 0 && (st.st_mode & S_IFREG);
+    return (wxStat( filename.fn_str() , &st) == 0 && (st.st_mode & S_IFREG))
+#ifdef __OS2__
+      || (errno == EACCES) // if access is denied something with that name
+                            // exists and is opened in exclusive mode.
+#endif
+      ;
 #else
     return wxStat( filename , &st) == 0 && (st.st_mode & S_IFREG);
 #endif
@@ -369,8 +368,8 @@ void wxStripExtension(wxChar *buffer)
 void wxStripExtension(wxString& buffer)
 {
     //RN:  Be careful about the handling the case where
-    //buffer.Length() == 0
-    for(size_t i = buffer.Length() - 1; i != wxString::npos; --i)
+    //buffer.length() == 0
+    for(size_t i = buffer.length() - 1; i != wxString::npos; --i)
     {
         if (buffer.GetChar(i) == wxT('.'))
         {
@@ -436,28 +435,38 @@ wxChar *wxRealPath (wxChar *path)
   return path;
 }
 
+wxString wxRealPath(const wxString& path)
+{
+    wxChar *buf1=MYcopystring(path);
+    wxChar *buf2=wxRealPath(buf1);
+    wxString buf(buf2);
+    delete [] buf1;
+    return buf;
+}
+
+
 // Must be destroyed
 wxChar *wxCopyAbsolutePath(const wxString& filename)
 {
-  if (filename.empty())
-    return (wxChar *) NULL;
+    if (filename.empty())
+        return (wxChar *) NULL;
 
-  if (! wxIsAbsolutePath(wxExpandPath(wxFileFunctionsBuffer, filename))) {
-    wxChar  buf[_MAXPATHLEN];
-    buf[0] = wxT('\0');
-    wxGetWorkingDirectory(buf, WXSIZEOF(buf));
-    wxChar ch = buf[wxStrlen(buf) - 1];
+    if (! wxIsAbsolutePath(wxExpandPath(wxFileFunctionsBuffer, filename)))
+    {
+        wxString buf = ::wxGetCwd();
+        wxChar ch = buf.Last();
 #ifdef __WXMSW__
-    if (ch != wxT('\\') && ch != wxT('/'))
-        wxStrcat(buf, wxT("\\"));
+        if (ch != wxT('\\') && ch != wxT('/'))
+            buf << wxT("\\");
 #else
-    if (ch != wxT('/'))
-        wxStrcat(buf, wxT("/"));
+        if (ch != wxT('/'))
+            buf << wxT("/");
 #endif
-    wxStrcat(buf, wxFileFunctionsBuffer);
-    return MYcopystring( wxRealPath(buf) );
-  }
-  return MYcopystring( wxFileFunctionsBuffer );
+        buf << wxFileFunctionsBuffer;
+        buf = wxRealPath( buf );
+        return MYcopystring( buf );
+    }
+    return MYcopystring( wxFileFunctionsBuffer );
 }
 
 /*-
@@ -794,7 +803,7 @@ wxString wxPathOnly (const wxString& path)
         // Local copy
         wxStrcpy (buf, WXSTRINGCAST path);
 
-        int l = path.Length();
+        int l = path.length();
         int i = l - 1;
 
         // Search backward for a backward or forward slash
@@ -1232,7 +1241,13 @@ bool wxDirExists(const wxChar *pszPathName)
 
     return (ret != (DWORD)-1) && (ret & FILE_ATTRIBUTE_DIRECTORY);
 #elif defined(__OS2__)
-    return (bool)(::DosSetCurrentDir((PSZ)(WXSTRINGCAST strPath)));
+    FILESTATUS3 Info = {{0}};
+    APIRET rc = ::DosQueryPathInfo((PSZ)(WXSTRINGCAST strPath), FIL_STANDARD,
+                                   (void*) &Info, sizeof(FILESTATUS3));
+
+    return ((rc == NO_ERROR) && (Info.attrFile & FILE_DIRECTORY)) ||
+      (rc == ERROR_SHARING_VIOLATION);
+    // If we got a sharing violation, there must be something with this name.
 #else // !__WIN32__
 
     wxStructStat st;
@@ -1335,18 +1350,22 @@ wxString wxFindNextFile()
 
 
 // Get current working directory.
-// If buf is NULL, allocates space using new, else
-// copies into buf.
-wxChar *wxGetWorkingDirectory(wxChar *buf, int sz)
+// If buf is NULL, allocates space using new, else copies into buf.
+// wxGetWorkingDirectory() is obsolete, use wxGetCwd()
+// wxDoGetCwd() is their common core to be moved
+// to wxGetCwd() once wxGetWorkingDirectory() will be removed.
+// Do not expose wxDoGetCwd in headers!
+
+wxChar *wxDoGetCwd(wxChar *buf, int sz)
 {
 #if defined(__WXPALMOS__)
-    // TODO ?
-    return NULL;
+    // TODO
+    if(buf && sz>0) buf[0] = _T('\0');
+    return buf;
 #elif defined(__WXWINCE__)
     // TODO
-    wxUnusedVar(buf);
-    wxUnusedVar(sz);
-    return NULL;
+    if(buf && sz>0) buf[0] = _T('\0');
+    return buf;
 #else
     if ( !buf )
     {
@@ -1468,13 +1487,17 @@ wxChar *wxGetWorkingDirectory(wxChar *buf, int sz)
     // __WXWINCE__
 }
 
-wxString wxGetCwd()
+#if WXWIN_COMPATIBILITY_2_6
+wxChar *wxGetWorkingDirectory(wxChar *buf, int sz)
 {
-    wxChar *buffer = new wxChar[_MAXPATHLEN];
-    wxGetWorkingDirectory(buffer, _MAXPATHLEN);
-    wxString str( buffer );
-    delete [] buffer;
+    return wxDoGetCwd(buf,sz);
+}
+#endif // WXWIN_COMPATIBILITY_2_6
 
+wxString wxGetCwd()
+{
+    wxString str;
+    wxDoGetCwd(wxStringBuffer(str, _MAXPATHLEN), _MAXPATHLEN);
     return str;
 }
 
@@ -1779,6 +1802,7 @@ bool wxIsWild( const wxString& pattern )
 * Written By Douglas A. Lewis <dalewis@cs.Buffalo.EDU>
 *
 * The match procedure is public domain code (from ircII's reg.c)
+* but modified to suit our tastes (RN: No "%" syntax I guess)
 */
 
 bool wxMatchWild( const wxString& pat, const wxString& text, bool dot_special )
@@ -1792,11 +1816,8 @@ bool wxMatchWild( const wxString& pat, const wxString& text, bool dot_special )
     const wxChar *m = pat.c_str(),
     *n = text.c_str(),
     *ma = NULL,
-    *na = NULL,
-    *mp = NULL,
-    *np = NULL;
+    *na = NULL;
     int just = 0,
-    pcount = 0,
     acount = 0,
     count = 0;
 
@@ -1814,7 +1835,6 @@ bool wxMatchWild( const wxString& pat, const wxString& text, bool dot_special )
             ma = ++m;
             na = n;
             just = 1;
-            mp = NULL;
             acount = count;
         }
         else if (*m == wxT('?'))
@@ -1857,8 +1877,6 @@ bool wxMatchWild( const wxString& pat, const wxString& text, bool dot_special )
             if (*m == *n)
             {
                 m++;
-                if (*n == wxT(' '))
-                    mp = NULL;
                 count++;
                 n++;
             }
@@ -1875,19 +1893,6 @@ bool wxMatchWild( const wxString& pat, const wxString& text, bool dot_special )
                 */
                 if (!*n)
                     return false;
-                if (mp)
-                {
-                    m = mp;
-                    if (*np == wxT(' '))
-                    {
-                        mp = NULL;
-                        goto check_percent;
-                    }
-                    n = ++np;
-                    count = pcount;
-                }
-                else
-                check_percent:
 
                 if (ma)
                 {
@@ -1965,8 +1970,7 @@ wxFileKind wxGetFileKind(FILE *fp)
 {
     // Note: The watcom rtl dll doesn't have fileno (the static lib does).
     //       Should be fixed in version 1.4.
-#if defined(wxFILEKIND_STUB) || \
-        (defined(__WATCOMC__) && __WATCOMC__ <= 1230 && defined(__SW_BR))
+#if defined(wxFILEKIND_STUB) || wxONLY_WATCOM_EARLIER_THAN(1,4)
     (void)fp;
     return wxFILE_KIND_DISK;
 #else