]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/filefn.h
make wxSocketImplUnix inherit from wxFDIOHandler as they're used for almost the same...
[wxWidgets.git] / include / wx / filefn.h
index 84a6429b4b262c171139a4c4ffb6776e300ccaaf..4f9435e6ddc42611133091d9df374104ea927f16 100644 (file)
@@ -15,6 +15,7 @@
 #include "wx/list.h"
 #include "wx/arrstr.h"
 
+#ifndef __WXPALMOS5__
 #ifdef __WXWINCE__
     #include "wx/msw/wince/time.h"
     #include "wx/msw/private.h"
@@ -39,6 +40,7 @@
         #include <unix.h>
     #endif
 #endif
+#endif // !__WXPALMOS5__
 
 #ifdef __OS2__
 // need to check for __OS2__ first since currently both
@@ -58,7 +60,7 @@
 #endif
 
 #if defined(__WINDOWS__) && !defined(__WXMICROWIN__)
-#if !defined( __GNUWIN32__ ) && !defined( __MWERKS__ ) && !defined(__SALFORDC__) && !defined(__WXWINCE__) && !defined(__CYGWIN__)
+#if !defined( __GNUWIN32__ ) && !defined( __MWERKS__ ) && !defined(__WXWINCE__) && !defined(__CYGWIN__)
     #include <direct.h>
     #include <dos.h>
     #include <io.h>
     #include <dir.h>
 #endif
 
-#ifdef __SALFORDC__
-    #include <dir.h>
-    #include <unix.h>
-#endif
-
+#ifndef __WXPALMOS5__
 #ifndef __WXWINCE__
     #include  <fcntl.h>       // O_RDONLY &c
 #endif
+#endif // !__WXPALMOS5__
 // ----------------------------------------------------------------------------
 // constants
 // ----------------------------------------------------------------------------
 
+#if defined(__VISUALC__) || defined(__DIGITALMARS__)
+    typedef int mode_t;
+#endif
+
 #ifdef __WXWINCE__
     typedef long off_t;
 #else
     typedef long off_t;
 #elif defined(__MWERKS__) && !defined(__INTEL__) && !defined(__MACH__)
     typedef long off_t;
+#elif defined(__WXPALMOS5__)
+    typedef long off_t;
 #endif
 
 enum wxSeekMode
@@ -139,25 +144,26 @@ enum wxFileKind
 #if defined( __WXWINCE__)
     typedef __int64 wxFileOffset;
     #define wxFileOffsetFmtSpec _("I64")
-    int wxOpen(const wxChar *filename, int oflag, int WXUNUSED(pmode));
-    int wxAccess(const wxChar *name, int WXUNUSED(how));
-    int wxClose(int fd);
-    int wxFsync(int WXUNUSED(fd));
-    int wxRead(int fd, void *buf, unsigned int count);
-    int wxWrite(int fd, const void *buf, unsigned int count);
-    int wxEof(int fd);
-    wxFileOffset wxSeek(int fd, wxFileOffset offset, int origin);
+    WXDLLIMPEXP_BASE int wxCRT_Open(const wxChar *filename, int oflag, int WXUNUSED(pmode));
+    WXDLLIMPEXP_BASE int wxCRT_Access(const wxChar *name, int WXUNUSED(how));
+    WXDLLIMPEXP_BASE int wxClose(int fd);
+    WXDLLIMPEXP_BASE int wxFsync(int WXUNUSED(fd));
+    WXDLLIMPEXP_BASE int wxRead(int fd, void *buf, unsigned int count);
+    WXDLLIMPEXP_BASE int wxWrite(int fd, const void *buf, unsigned int count);
+    WXDLLIMPEXP_BASE int wxEof(int fd);
+    WXDLLIMPEXP_BASE wxFileOffset wxSeek(int fd, wxFileOffset offset, int origin);
     #define wxLSeek wxSeek
-    wxFileOffset wxTell(int fd);
+    WXDLLIMPEXP_BASE wxFileOffset wxTell(int fd);
 
     // always Unicode under WinCE
-    #define   wxMkDir      _wmkdir
-    #define   wxRmDir      _wrmdir
-    #define   wxStat       _wstat
+    #define   wxCRT_MkDir      _wmkdir
+    #define   wxCRT_RmDir      _wrmdir
+    #define   wxCRT_Stat       _wstat
     #define   wxStructStat struct _stat
-#elif defined(__WXMSW__) && !defined(__WXPALMOS__) && \
+#elif (defined(__WXMSW__) || defined(__OS2__)) && !defined(__WXPALMOS__) && \
       ( \
         defined(__VISUALC__) || \
+        defined(__MINGW64__) || \
         (defined(__MINGW32__) && !defined(__WINE__) && \
                                 wxCHECK_W32API_VERSION(0, 5)) || \
         defined(__MWERKS__) || \
@@ -171,7 +177,7 @@ enum wxFileKind
     // detect compilers which have support for huge files
     #if defined(__VISUALC__)
         #define wxHAS_HUGE_FILES 1
-    #elif defined(__MINGW32__)
+    #elif defined(__MINGW32__) || defined(__MINGW64__)
         #define wxHAS_HUGE_FILES 1
     #elif defined(_LARGE_FILES)
         #define wxHAS_HUGE_FILES 1
@@ -197,7 +203,7 @@ enum wxFileKind
     // to avoid using them as they're not present in earlier versions and
     // always using the native functions spelling is easier than testing for
     // the versions
-    #if defined(__BORLANDC__) || defined(__DMC__) || defined(__WATCOMC__)
+    #if defined(__BORLANDC__) || defined(__DMC__) || defined(__WATCOMC__) || defined(__MINGW64__)
         #define wxPOSIX_IDENT(func)    ::func
     #else // by default assume MSVC-compatible names
         #define wxPOSIX_IDENT(func)    _ ## func
@@ -232,9 +238,16 @@ enum wxFileKind
     #endif
 
     #ifdef wxHAS_HUGE_FILES
-        #define   wxSeek       wxPOSIX_IDENT(lseeki64)
-        #define   wxLseek      wxPOSIX_IDENT(lseeki64)
-        #define   wxTell       wxPOSIX_IDENT(telli64)
+        #ifndef __MINGW64__
+            #define   wxSeek       wxPOSIX_IDENT(lseeki64)
+            #define   wxLseek      wxPOSIX_IDENT(lseeki64)
+            #define   wxTell       wxPOSIX_IDENT(telli64)
+        #else
+            // unfortunately, mingw-W64 is somewhat inconsistent...
+            #define   wxSeek       _lseeki64
+            #define   wxLseek      _lseeki64
+            #define   wxTell       _telli64
+        #endif
     #else // !wxHAS_HUGE_FILES
         #define   wxSeek       wxPOSIX_IDENT(lseek)
         #define   wxLseek      wxPOSIX_IDENT(lseek)
@@ -242,12 +255,15 @@ enum wxFileKind
     #endif // wxHAS_HUGE_FILES/!wxHAS_HUGE_FILES
 
     #ifndef __WATCOMC__
-        #if !defined(__BORLANDC__) || (__BORLANDC__ > 0x540)
-           // NB: this one is not POSIX and always has the underscore
-           #define   wxFsync      _commit
-
-           #define HAVE_FSYNC
-       #endif // BORLANDC
+         #if !defined(__BORLANDC__) || (__BORLANDC__ > 0x540)
+             // NB: this one is not POSIX and always has the underscore
+             #define   wxFsync      _commit
+
+             // could be already defined by configure (Cygwin)
+             #ifndef HAVE_FSYNC
+                 #define HAVE_FSYNC
+             #endif
+        #endif // BORLANDC
     #endif
 
     #define   wxEof        wxPOSIX_IDENT(eof)
@@ -276,72 +292,88 @@ enum wxFileKind
                                  wxPOSIX_STRUCT(stati64) *buffer);
             #endif // Windows compilers with MSLU support
 
-            #define   wxOpen       wxMSLU__wopen
+            #define   wxCRT_Open       wxMSLU__wopen
 
-            #define   wxAccess     wxMSLU__waccess
-            #define   wxMkDir      wxMSLU__wmkdir
-            #define   wxRmDir      wxMSLU__wrmdir
+            #define   wxCRT_Access     wxMSLU__waccess
+            #define   wxCRT_MkDir      wxMSLU__wmkdir
+            #define   wxCRT_RmDir      wxMSLU__wrmdir
             #ifdef wxHAS_HUGE_FILES
-                #define   wxStat       wxMSLU__wstati64
+                #define   wxCRT_Stat   wxMSLU__wstati64
             #else
-                #define   wxStat       wxMSLU__wstat
+                #define   wxCRT_Stat   wxMSLU__wstat
             #endif
         #else // !wxUSE_UNICODE_MSLU
             #ifdef __BORLANDC__
                 #if __BORLANDC__ >= 0x550 && __BORLANDC__ <= 0x551
-                    WXDLLIMPEXP_BASE int wxOpen(const wxChar *pathname,
-                                                int flags, mode_t mode);
+                    WXDLLIMPEXP_BASE int wxCRT_Open(const wxChar *pathname,
+                                                    int flags, mode_t mode);
                 #else
-                    #define   wxOpen       _wopen
+                    #define   wxCRT_Open       _wopen
                 #endif
-                #define   wxAccess     _waccess
-                #define   wxMkDir      _mkdir
-                #define   wxRmDir      _rmdir
+                #define   wxCRT_Access     _waccess
+                #define   wxCRT_MkDir      _wmkdir
+                #define   wxCRT_RmDir      _wrmdir
                 #ifdef wxHAS_HUGE_FILES
-                    #define   wxStat       _wstati64
+                    #define   wxCRT_Stat       _wstati64
                 #else
-                    #define   wxStat       _wstat
+                    #define   wxCRT_Stat       _wstat
                 #endif
             #else
-                #define   wxOpen       _wopen
-                #define   wxAccess     _waccess
-                #define   wxMkDir      _wmkdir
-                #define   wxRmDir      _wrmdir
+                #define   wxCRT_Open       _wopen
+                #define   wxCRT_Access     _waccess
+                #define   wxCRT_MkDir      _wmkdir
+                #define   wxCRT_RmDir      _wrmdir
                 #ifdef wxHAS_HUGE_FILES
-                    #define   wxStat       _wstati64
+                    #define   wxCRT_Stat       _wstati64
                 #else
-                    #define   wxStat       _wstat
+                    #define   wxCRT_Stat       _wstat
                 #endif
             #endif
         #endif // wxUSE_UNICODE_MSLU/!wxUSE_UNICODE_MSLU
     #else // !wxUSE_UNICODE
-        #define   wxOpen       wxPOSIX_IDENT(open)
-        #define   wxAccess     wxPOSIX_IDENT(access)
-        #define   wxMkDir      wxPOSIX_IDENT(mkdir)
-        #define   wxRmDir      wxPOSIX_IDENT(rmdir)
+        #define   wxCRT_Open       wxPOSIX_IDENT(open)
+        #define   wxCRT_Access     wxPOSIX_IDENT(access)
+        #define   wxCRT_MkDir      wxPOSIX_IDENT(mkdir)
+        #define   wxCRT_RmDir      wxPOSIX_IDENT(rmdir)
         #ifdef wxHAS_HUGE_FILES
-            #define   wxStat       wxPOSIX_IDENT(stati64)
+            #define   wxCRT_Stat       wxPOSIX_IDENT(stati64)
         #else
-            #define   wxStat       wxPOSIX_IDENT(stat)
+            // Unfortunately Watcom is not consistent, so:-
+            #if defined(__OS2__) && defined(__WATCOMC__)
+                #define   wxCRT_Stat       _stat
+            #else
+                #define   wxCRT_Stat       wxPOSIX_IDENT(stat)
+            #endif
         #endif
     #endif // wxUSE_UNICODE/!wxUSE_UNICODE
 
     // Types: Notice that Watcom is the only compiler to have a wide char
     // version of struct stat as well as a wide char stat function variant.
-    // This was droped since OW 1.4 "for consistency across platforms".
-    #ifdef wxHAS_HUGE_FILES
-        #if wxUSE_UNICODE && wxONLY_WATCOM_EARLIER_THAN(1,4)
-            #define   wxStructStat struct _wstati64
+    // This was dropped since OW 1.4 "for consistency across platforms".
+    //
+    // Borland is also special in that it uses _stat with Unicode functions
+    // (for MSVC compatibility?) but stat with ANSI ones
+    #ifdef __BORLANDC__
+        #if wxUSE_UNICODE
+            #define wxStructStat struct _stat
         #else
-            #define   wxStructStat struct _stati64
+            #define wxStructStat struct stat
         #endif
-    #else
-        #if wxUSE_UNICODE && wxONLY_WATCOM_EARLIER_THAN(1,4)
-            #define   wxStructStat struct _wstat
+    #else // !__BORLANDC__
+        #ifdef wxHAS_HUGE_FILES
+            #if wxUSE_UNICODE && wxONLY_WATCOM_EARLIER_THAN(1,4)
+                #define wxStructStat struct _wstati64
+            #else
+                #define wxStructStat struct _stati64
+            #endif
         #else
-            #define   wxStructStat struct _stat
+            #if wxUSE_UNICODE && wxONLY_WATCOM_EARLIER_THAN(1,4)
+                #define wxStructStat struct _wstat
+            #else
+                #define wxStructStat struct _stat
+            #endif
         #endif
-    #endif
+    #endif // __BORLANDC__/!__BORLANDC__
 
     // constants (unless already defined by the user code)
     #ifdef wxHAS_UNDERSCORES_IN_POSIX_IDENTS
@@ -372,6 +404,43 @@ enum wxFileKind
 
     // it's a private define, undefine it so that nobody gets tempted to use it
     #undef wxHAS_HUGE_FILES
+#elif defined (__WXPALMOS__)
+    typedef off_t wxFileOffset;
+#ifdef _LARGE_FILES
+    #define wxFileOffsetFmtSpec wxLongLongFmtSpec
+    wxCOMPILE_TIME_ASSERT( sizeof(off_t) == sizeof(wxLongLong_t), BadFileSizeType );
+    // wxFile is present and supports large files
+    #ifdef wxUSE_FILE
+        #define wxHAS_LARGE_FILES
+    #endif
+    // wxFFile is present and supports large files
+    #if SIZEOF_LONG == 8 || defined HAVE_FSEEKO
+        #define wxHAS_LARGE_FFILES
+    #endif
+#else
+    #define wxFileOffsetFmtSpec _T("")
+#endif
+    #define   wxClose      close
+    #define   wxRead       ::read
+    #define   wxWrite      ::write
+    #define   wxLseek      lseek
+    #define   wxSeek       lseek
+    #define   wxFsync      fsync
+    #define   wxEof        eof
+
+    #define   wxCRT_MkDir      mkdir
+    #define   wxCRT_RmDir      rmdir
+
+    #define   wxTell(fd)   lseek(fd, 0, SEEK_CUR)
+
+    #define   wxStructStat struct stat
+
+    #define   wxCRT_Open       open
+    #define   wxCRT_Stat       svfs_stat
+    #define   wxCRT_Lstat      lstat
+    #define   wxCRT_Access     access
+
+    #define wxHAS_NATIVE_LSTAT
 #else // Unix or Windows using unknown compiler, assume POSIX supported
     typedef off_t wxFileOffset;
     #ifdef _LARGE_FILES
@@ -398,44 +467,55 @@ enum wxFileKind
     #define   wxFsync      fsync
     #define   wxEof        eof
 
-    #define   wxMkDir      mkdir
-    #define   wxRmDir      rmdir
+    #define   wxCRT_MkDir      mkdir
+    #define   wxCRT_RmDir      rmdir
 
     #define   wxTell(fd)   lseek(fd, 0, SEEK_CUR)
 
     #define   wxStructStat struct stat
 
-    #if wxUSE_UNICODE
-        #define wxNEED_WX_UNISTD_H
-        #if defined(__DMC__)
-            typedef unsigned long mode_t;
-        #endif
-        WXDLLIMPEXP_BASE int wxStat( const wxChar *file_name, wxStructStat *buf );
-        WXDLLIMPEXP_BASE int wxLstat( const wxChar *file_name, wxStructStat *buf );
-        WXDLLIMPEXP_BASE int wxAccess( const wxChar *pathname, int mode );
-        WXDLLIMPEXP_BASE int wxOpen( const wxChar *pathname, int flags, mode_t mode );
-    #else
-        #define   wxOpen       open
-        #define   wxStat       stat
-        #define   wxLstat      lstat
-        #define   wxAccess     access
-    #endif
+    #define   wxCRT_Open       open
+    #define   wxCRT_Stat       stat
+    #define   wxCRT_Lstat      lstat
+    #define   wxCRT_Access     access
 
     #define wxHAS_NATIVE_LSTAT
 #endif // platforms
 
+// if the platform doesn't have symlinks, define wxCRT_Lstat to be the same as
+// wxCRT_Stat to avoid #ifdefs in the code using it
+#ifndef wxHAS_NATIVE_LSTAT
+    #define wxCRT_Lstat wxCRT_Stat
+#endif
+
+inline int wxAccess(const wxString& path, mode_t mode)
+    { return wxCRT_Access(path.fn_str(), mode); }
+inline int wxOpen(const wxString& path, int flags, mode_t mode)
+    { return wxCRT_Open(path.fn_str(), flags, mode); }
+
+// FIXME-CE: provide our own implementations of the missing CRT functions
+#ifndef __WXWINCE__
+inline int wxStat(const wxString& path, wxStructStat *buf)
+    { return wxCRT_Stat(path.fn_str(), buf); }
+inline int wxLstat(const wxString& path, wxStructStat *buf)
+    { return wxCRT_Lstat(path.fn_str(), buf); }
+inline int wxRmDir(const wxString& path)
+    { return wxCRT_RmDir(path.fn_str()); }
+#if defined(__WINDOWS__) || (defined(__OS2__) && defined(__WATCOMC__))
+inline int wxMkDir(const wxString& path, mode_t WXUNUSED(mode) = 0)
+    { return wxCRT_MkDir(path.fn_str()); }
+#else
+inline int wxMkDir(const wxString& path, mode_t mode)
+    { return wxCRT_MkDir(path.fn_str(), mode); }
+#endif
+#endif // !__WXWINCE__
+
 #ifdef O_BINARY
     #define wxO_BINARY O_BINARY
 #else
     #define wxO_BINARY 0
 #endif
 
-// if the platform doesn't have symlinks, define wxLstat to be the same as
-// wxStat to avoid #ifdefs in the code using it
-#ifndef wxHAS_NATIVE_LSTAT
-    #define wxLstat wxStat
-#endif
-
 #if defined(__VISAGECPP__) && __IBMCPP__ >= 400
 //
 // VisualAge C++ V4.0 cannot have any external linkage const decs
@@ -452,7 +532,7 @@ const int wxInvalidOffset = -1;
 WXDLLIMPEXP_BASE bool wxFileExists(const wxString& filename);
 
 // does the path exist? (may have or not '/' or '\\' at the end)
-WXDLLIMPEXP_BASE bool wxDirExists(const wxChar *pszPathName);
+WXDLLIMPEXP_BASE bool wxDirExists(const wxString& pathName);
 
 WXDLLIMPEXP_BASE bool wxIsAbsolutePath(const wxString& filename);
 
@@ -463,15 +543,15 @@ WXDLLIMPEXP_BASE wxString wxFileNameFromPath(const wxString& path);
 // Get directory
 WXDLLIMPEXP_BASE wxString wxPathOnly(const wxString& path);
 
-// wxString version
-WXDLLIMPEXP_BASE wxString wxRealPath(const wxString& path);
-
-WXDLLIMPEXP_BASE void wxDos2UnixFilename(wxChar *s);
+WXDLLIMPEXP_BASE void wxDos2UnixFilename(char *s);
+WXDLLIMPEXP_BASE void wxDos2UnixFilename(wchar_t *s);
 
-WXDLLIMPEXP_BASE void wxUnix2DosFilename(wxChar *s);
+WXDLLIMPEXP_BASE void wxUnix2DosFilename(char *s);
+WXDLLIMPEXP_BASE void wxUnix2DosFilename(wchar_t *s);
 
 // Strip the extension, in situ
-WXDLLIMPEXP_BASE void wxStripExtension(wxChar *buffer);
+WXDLLIMPEXP_BASE void wxStripExtension(char *buffer);
+WXDLLIMPEXP_BASE void wxStripExtension(wchar_t *buffer);
 WXDLLIMPEXP_BASE void wxStripExtension(wxString& buffer);
 
 // Get a temporary filename
@@ -479,8 +559,9 @@ WXDLLIMPEXP_BASE wxChar* wxGetTempFileName(const wxString& prefix, wxChar *buf =
 WXDLLIMPEXP_BASE bool wxGetTempFileName(const wxString& prefix, wxString& buf);
 
 // Expand file name (~/ and ${OPENWINHOME}/ stuff)
-WXDLLIMPEXP_BASE wxChar* wxExpandPath(wxChar *dest, const wxChar *path);
-WXDLLIMPEXP_BASE bool wxExpandPath(wxString& dest, const wxChar *path);
+WXDLLIMPEXP_BASE char* wxExpandPath(char *dest, const wxString& path);
+WXDLLIMPEXP_BASE wchar_t* wxExpandPath(wchar_t *dest, const wxString& path);
+// FIXME-UTF8: add some wxString version
 
 // Contract w.r.t environment (</usr/openwin/lib, OPENWHOME> -> ${OPENWINHOME}/lib)
 // and make (if under the home tree) relative to home
@@ -490,7 +571,10 @@ WXDLLIMPEXP_BASE wxChar* wxContractPath(const wxString& filename,
                                    const wxString& user = wxEmptyString);
 
 // Destructive removal of /./ and /../ stuff
-WXDLLIMPEXP_BASE wxChar* wxRealPath(wxChar *path);
+// FIXME-UTF8: deprecate these two (and similar)
+WXDLLIMPEXP_BASE char* wxRealPath(char *path);
+WXDLLIMPEXP_BASE wchar_t* wxRealPath(wchar_t *path);
+WXDLLIMPEXP_BASE wxString wxRealPath(const wxString& path);
 
 // Allocate a copy of the full absolute path
 WXDLLIMPEXP_BASE wxChar* wxCopyAbsolutePath(const wxString& path);
@@ -499,7 +583,7 @@ WXDLLIMPEXP_BASE wxChar* wxCopyAbsolutePath(const wxString& path);
 // Flags are reserved for future use.
 #define wxFILE  1
 #define wxDIR   2
-WXDLLIMPEXP_BASE wxString wxFindFirstFile(const wxChar *spec, int flags = wxFILE);
+WXDLLIMPEXP_BASE wxString wxFindFirstFile(const wxString& spec, int flags = wxFILE);
 WXDLLIMPEXP_BASE wxString wxFindNextFile();
 
 // Does the pattern contain wildcards?
@@ -591,6 +675,9 @@ WXDLLIMPEXP_BASE bool wxIsExecutable(const wxString &path);
   // CYGWIN also uses UNIX settings
   #define wxFILE_SEP_PATH     wxFILE_SEP_PATH_UNIX
   #define wxPATH_SEP          wxPATH_SEP_UNIX
+#elif defined(__WXPALMOS__)
+  #define wxFILE_SEP_PATH     wxFILE_SEP_PATH_UNIX
+  #define wxPATH_SEP          wxPATH_SEP_UNIX
 #elif defined(__MAC__)
   #define wxFILE_SEP_PATH     wxFILE_SEP_PATH_MAC
   #define wxPATH_SEP          wxPATH_SEP_MAC
@@ -619,17 +706,17 @@ inline bool wxIsPathSeparator(wxChar c)
 }
 
 // does the string ends with path separator?
-WXDLLIMPEXP_BASE bool wxEndsWithPathSeparator(const wxChar *pszFileName);
+WXDLLIMPEXP_BASE bool wxEndsWithPathSeparator(const wxString& filename);
 
 // split the full path into path (including drive for DOS), name and extension
 // (understands both '/' and '\\')
-WXDLLIMPEXP_BASE void wxSplitPath(const wxChar *pszFileName,
+WXDLLIMPEXP_BASE void wxSplitPath(const wxString& fileName,
                              wxString *pstrPath,
                              wxString *pstrName,
                              wxString *pstrExt);
 
 // find a file in a list of directories, returns false if not found
-WXDLLIMPEXP_BASE bool wxFindFileInPath(wxString *pStr, const wxChar *pszPath, const wxChar *pszFile);
+WXDLLIMPEXP_BASE bool wxFindFileInPath(wxString *pStr, const wxString& szPath, const wxString& szFile);
 
 // Get the OS directory if appropriate (such as the Windows directory).
 // On non-Windows platform, probably just return the empty string.