]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/filefn.cpp
added missing WXDLLEXPORT
[wxWidgets.git] / src / common / filefn.cpp
index ba270dea90fe62b2221de7f50fbc4fdbbd4a593d..997c0ca6ae4c13345751d1333789bbc6abc4827b 100644 (file)
 
 #ifdef __WINDOWS__
     #include <windows.h>
-
+    #include "wx/msw/mslu.h"
+    
     // sys/cygwin.h is needed for cygwin_conv_to_full_win32_path()
     //
     // note that it must be included after <windows.h>
     #ifdef __GNUWIN32__
-        #include <sys/cygwin.h>
+        #ifdef __CYGWIN__
+            #include <sys/cygwin.h>
+        #endif
         #include <wchar.h>
         #ifndef __TWIN32__
             #include <sys/unistd.h>
     #define _MAXPATHLEN 1024
 #endif
 
-extern wxChar *wxBuffer;
-
 #ifdef __WXMAC__
 #    include "MoreFiles.h"
 #    include "MoreFilesExtras.h"
@@ -300,16 +301,10 @@ bool
 wxFileExists (const wxString& filename)
 {
 #if defined(__WIN32__) && !defined(__WXMICROWIN__)
-    // GetFileAttributes can copy with network paths
+    // GetFileAttributes can copy with network paths unlike stat()
     DWORD ret = ::GetFileAttributes(filename);
-    if ( ret == (DWORD)-1 )
-    {
-        wxLogLastError(_T("GetFileAttributes"));
-
-        return FALSE;
-    }
 
-    return !(ret & FILE_ATTRIBUTE_DIRECTORY);
+    return (ret != (DWORD)-1) && !(ret & FILE_ATTRIBUTE_DIRECTORY);
 #else
     wxStructStat stbuf;
     if ( !filename.empty() && wxStat (OS_FILENAME(filename), &stbuf) == 0 )
@@ -1091,11 +1086,15 @@ wxCopyFile (const wxString& file1, const wxString& file2, bool overwrite)
     // instead of our code if available
     //
     // NB: 3rd parameter is bFailIfExists i.e. the inverse of overwrite
-    return ::CopyFile(file1, file2, !overwrite) != 0;
+    if ( !::CopyFile(file1, file2, !overwrite) )
+    {
+        wxLogSysError(_("Failed to copy the file '%s' to '%s'"),
+                      file1.c_str(), file2.c_str());
+
+        return FALSE;
+    }
 #elif defined(__WXPM__)
-    if (::DosCopy(file2, file2, overwrite ? DCPY_EXISTING : 0) == 0)
-        return TRUE;
-    else
+    if ( ::DosCopy(file2, file2, overwrite ? DCPY_EXISTING : 0) != 0 )
         return FALSE;
 #else // !Win32
     wxStructStat fbuf;
@@ -1174,9 +1173,9 @@ wxCopyFile (const wxString& file1, const wxString& file2, bool overwrite)
         return FALSE;
     }
 #endif // OS/2 || Mac
+#endif // __WXMSW__ && __WIN32__
 
     return TRUE;
-#endif // __WXMSW__ && __WIN32__
 }
 
 bool
@@ -1266,6 +1265,7 @@ bool wxRmdir(const wxString& dir, int WXUNUSED(flags))
 bool wxPathExists(const wxChar *pszPathName)
 {
     wxString strPath(pszPathName);
+
 #ifdef __WINDOWS__
     // Windows fails to find directory named "c:\dir\" even if "c:\dir" exists,
     // so remove all trailing backslashes from the path - but don't do this for
@@ -1281,17 +1281,11 @@ bool wxPathExists(const wxChar *pszPathName)
 #endif // __WINDOWS__
 
 #if defined(__WIN32__) && !defined(__WXMICROWIN__)
-    // Stat can't cope with network paths
-    DWORD ret = ::GetFileAttributes(filename);
-    if ( ret == (DWORD)-1 )
-    {
-        wxLogLastError(_T("GetFileAttributes"));
+    // stat() can't cope with network paths
+    DWORD ret = ::GetFileAttributes(strPath);
 
-        return FALSE;
-    }
-
-    return (ret & FILE_ATTRIBUTE_DIRECTORY) != 0;
-#else
+    return (ret != (DWORD)-1) && (ret & FILE_ATTRIBUTE_DIRECTORY);
+#else // !__WIN32__
 
     wxStructStat st;
 #ifndef __VISAGECPP__
@@ -1303,7 +1297,7 @@ bool wxPathExists(const wxChar *pszPathName)
         (st.st_mode == S_IFDIR);
 #endif
 
-#endif
+#endif // __WIN32__/!__WIN32__
 }
 
 // Get a temporary filename, opening and closing the file.
@@ -1397,21 +1391,37 @@ wxChar *wxGetWorkingDirectory(wxChar *buf, int sz)
         buf = new wxChar[sz + 1];
     }
 
-    bool ok;
+    bool ok = FALSE;
 
     // for the compilers which have Unicode version of _getcwd(), call it
     // directly, for the others call the ANSI version and do the translation
-#if wxUSE_UNICODE
+#if !wxUSE_UNICODE
+       #define cbuf buf
+#else // wxUSE_UNICODE
+       bool needsANSI = TRUE;
+
+       #if !defined(HAVE_WGETCWD) || wxUSE_UNICODE_MSLU
+        wxCharBuffer c_buffer(sz);
+               char *cbuf = (char*)(const char*)c_buffer;
+       #endif
+
     #ifdef HAVE_WGETCWD
-        ok = _wgetcwd(buf, sz) != NULL;
-    #else // !HAVE_WGETCWD
-        wxCharBuffer cbuf(sz);
+               #if     wxUSE_UNICODE_MSLU
+                       if ( wxGetOsVersion() != wxWIN95 )
+        #else
+            char *cbuf = NULL; // never really used because needsANSI will always be FALSE
+               #endif
+                       {
+                               ok = _wgetcwd(buf, sz) != NULL;
+                               needsANSI = FALSE;
+                       }
     #endif
-#endif //
 
-#if !wxUSE_UNICODE || !defined(HAVE_WGETCWD)
+       if ( needsANSI )
+#endif // wxUSE_UNICODE
+       {
     #ifdef _MSC_VER
-        ok = _getcwd(buf, sz) != NULL;
+        ok = _getcwd(cbuf, sz) != NULL;
     #elif defined(__WXMAC__) && !defined(__DARWIN__)
         FSSpec cwdSpec ;
         FCBPBRec pb;
@@ -1429,8 +1439,8 @@ wxChar *wxGetWorkingDirectory(wxChar *buf, int sz)
             cwdSpec.name[0] = 0 ;
             wxString res = wxMacFSSpec2MacFilename( &cwdSpec ) ;
 
-            strcpy( buf , res ) ;
-            buf[res.length()]=0 ;
+            strcpy( cbuf , res ) ;
+            cbuf[res.length()]=0 ;
 
             ok = TRUE;
         }
@@ -1441,14 +1451,14 @@ wxChar *wxGetWorkingDirectory(wxChar *buf, int sz)
     #elif defined(__VISAGECPP__) || (defined (__OS2__) && defined (__WATCOMC__))
         APIRET rc;
         rc = ::DosQueryCurrentDir( 0 // current drive
-                                  ,buf
+                                  ,cbuf
                                   ,(PULONG)&sz
                                  );
         ok = rc != 0;
     #else // !Win32/VC++ !Mac !OS2
-        ok = getcwd(buf, sz) != NULL;
+        ok = getcwd(cbuf, sz) != NULL;
     #endif // platform
-#endif // !wxUSE_UNICODE || !HAVE_WGETCWD
+       }
 
     if ( !ok )
     {
@@ -1472,19 +1482,23 @@ wxChar *wxGetWorkingDirectory(wxChar *buf, int sz)
         }
 #endif // __DJGPP__
 
-#ifdef __GNUWIN32__
+#ifdef __CYGWIN__
         // another example of DOS/Unix mix (Cygwin)
         wxString pathUnix = buf;
         cygwin_conv_to_full_win32_path(pathUnix, buf);
-#endif // __GNUWIN32__
+#endif // __CYGWIN__
 
         // finally convert the result to Unicode if needed
-#if wxUSE_UNICODE && !defined(HAVE_WGETCWD)
+#if wxUSE_UNICODE
         wxConvFile.MB2WC(buf, cbuf, sz);
 #endif // wxUSE_UNICODE
     }
 
     return buf;
+
+#if !wxUSE_UNICODE
+       #undef cbuf
+#endif
 }
 
 wxString wxGetCwd()
@@ -1796,28 +1810,3 @@ bool wxMatchWild( const wxString& pat, const wxString& text, bool dot_special )
 #ifdef __VISUALC__
     #pragma warning(default:4706)   // assignment within conditional expression
 #endif // VC++
-
-//------------------------------------------------------------------------
-// Missing functions in Unicode for Win9x
-//------------------------------------------------------------------------
-
-// NB: MSLU only covers Win32 API, it doesn't provide Unicode implementation of
-//     libc functions. Unfortunately, some of MSVCRT wchar_t functions
-//     (e.g. _wopen) don't work on Windows 9x, so we have to workaround it
-//     by calling the char version. We still want to use wchar_t version on
-//     NT/2000/XP, though, because they allow for Unicode file names.
-#if wxUSE_UNICODE_MSLU
-
-    #if defined( __VISUALC__ ) \
-        || ( defined(__MINGW32__) && wxCHECK_W32API_VERSION( 0, 5 ) ) \
-        || ( defined(__MWERKS__) && defined(__WXMSW__) )
-    WXDLLEXPORT int wxOpen(const wxChar *name, int flags, int mode)
-    {
-        if ( wxGetOsVersion() == wxWINDOWS_NT )
-            return _wopen(name, flags, mode);
-        else
-            return _open(wxConvFile.cWX2MB(name), flags, mode);
-    }
-    #endif
-
-#endif // wxUSE_UNICODE_MSLU