#undef wxHAS_HUGE_FILES
- // detect compilers which have support for huge files (notice that the
- // first case covers MSVC, so we don't have to test for it explicitly)
- #if ((_INTEGRAL_MAX_BITS >= 64) || defined(_LARGE_FILES))
+ // detect compilers which have support for huge files
+ #if defined(__VISUALC__)
#define wxHAS_HUGE_FILES 1
#elif defined(__MINGW32__)
#define wxHAS_HUGE_FILES 1
- #else
- // DMC, Watcom, Metrowerks and Borland don't have huge file support (or
- // at least not all functions needed for it by wx) currently
- #define wxHAS_HUGE_FILES 0
+ #elif defined(_LARGE_FILES)
+ #define wxHAS_HUGE_FILES 1
#endif
- // functions
- #if defined(__BORLANDC__) || defined(__WATCOMC__)
- #define _tell tell
- #endif
+ // other Windows compilers (DMC, Watcom, Metrowerks and Borland) don't have
+ // huge file support (or at least not all functions needed for it by wx)
+ // currently
- #if wxHAS_HUGE_FILES
+ #ifdef wxHAS_HUGE_FILES
typedef wxLongLong_t wxFileOffset;
#define wxFileOffsetFmtSpec wxLongLongFmtSpec
#else
typedef off_t wxFileOffset;
#endif
- #define wxClose _close
+
+ // functions
+
+ // MSVC and compatible compilers prepend underscores to the POSIX function
+ // names, other compilers don't and even if their later versions usually do
+ // define the versions with underscores for MSVC compatibility, it's better
+ // 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__)
+ #define wxPOSIX_IDENT(func) ::func
+ #else // by default assume MSVC-compatible names
+ #define wxPOSIX_IDENT(func) _ ## func
+ #define wxHAS_UNDERSCORES_IN_POSIX_IDENTS
+ #endif
+
+ // at least Borland 5.5 doesn't like "struct ::stat" so don't use the scope
+ // resolution operator present in wxPOSIX_IDENT for it
+ #ifdef __BORLANDC__
+ #define wxPOSIX_STRUCT(s) struct s
+ #else
+ #define wxPOSIX_STRUCT(s) struct wxPOSIX_IDENT(s)
+ #endif
+
+ // first functions not working with strings, i.e. without ANSI/Unicode
+ // complications
+ #define wxClose wxPOSIX_IDENT(close)
#if defined(__MWERKS__)
#if __MSL__ >= 0x6000
#define wxWrite(fd, buf, nCount)\
_write(fd, (const char *)buf, nCount)
#endif
- #else
- #if defined(__DMC__) || defined(__WATCOMC__)
- #define wxRead ::read
- #define wxWrite ::write
- #else
- #define wxRead _read
- #define wxWrite _write
- #endif
+ #else // __MWERKS__
+ #define wxRead wxPOSIX_IDENT(read)
+ #define wxWrite wxPOSIX_IDENT(write)
#endif
- #if wxHAS_HUGE_FILES
- #define wxSeek _lseeki64
- #define wxLseek _lseeki64
- #define wxTell _telli64
+
+ #ifdef wxHAS_HUGE_FILES
+ #define wxSeek wxPOSIX_IDENT(lseeki64)
+ #define wxLseek wxPOSIX_IDENT(lseeki64)
+ #define wxTell wxPOSIX_IDENT(telli64)
#else // !wxHAS_HUGE_FILES
- #define wxSeek _lseek
- #define wxLseek _lseek
- #define wxTell _tell
+ #define wxSeek wxPOSIX_IDENT(lseek)
+ #define wxLseek wxPOSIX_IDENT(lseek)
+ #define wxTell wxPOSIX_IDENT(tell)
#endif // wxHAS_HUGE_FILES/!wxHAS_HUGE_FILES
- #define wxFsync _commit
+ #ifndef __WATCOMC__
+ #if !defined(__BORLANDC__) || (__BORLANDC__ > 0x540)
+ // NB: this one is not POSIX and always has the underscore
+ #define wxFsync _commit
- #if defined(__WATCOMC__)
- #define wxEof ::eof
- #else
- #define wxEof _eof
+ #define HAVE_FSYNC
+ #endif // BORLANDC
#endif
+ #define wxEof wxPOSIX_IDENT(eof)
+
+ // then the functions taking strings
#if wxUSE_UNICODE
#if wxUSE_UNICODE_MSLU
+ // implement the missing file functions in Win9x ourselves
+ #if defined( __VISUALC__ ) \
+ || ( defined(__MINGW32__) && wxCHECK_W32API_VERSION( 0, 5 ) ) \
+ || ( defined(__MWERKS__) && defined(__WXMSW__) ) \
+ || ( defined(__BORLANDC__) && (__BORLANDC__ > 0x460) ) \
+ || defined(__DMC__)
+
+ WXDLLIMPEXP_BASE int wxMSLU__wopen(const wxChar *name,
+ int flags, int mode);
+ WXDLLIMPEXP_BASE int wxMSLU__waccess(const wxChar *name,
+ int mode);
+ WXDLLIMPEXP_BASE int wxMSLU__wmkdir(const wxChar *name);
+ WXDLLIMPEXP_BASE int wxMSLU__wrmdir(const wxChar *name);
+
+ WXDLLIMPEXP_BASE int
+ wxMSLU__wstat(const wxChar *name, wxPOSIX_STRUCT(stat) *buffer);
+ WXDLLIMPEXP_BASE int
+ wxMSLU__wstati64(const wxChar *name,
+ wxPOSIX_STRUCT(stati64) *buffer);
+ #endif // Windows compilers with MSLU support
+
#define wxOpen wxMSLU__wopen
#define wxAccess wxMSLU__waccess
#define wxMkDir wxMSLU__wmkdir
#define wxRmDir wxMSLU__wrmdir
- #if wxHAS_HUGE_FILES
+ #ifdef wxHAS_HUGE_FILES
#define wxStat wxMSLU__wstati64
#else
#define wxStat wxMSLU__wstat
#endif
- #else
- #define wxOpen _wopen
- #define wxAccess _waccess
- #define wxMkDir _wmkdir
- #define wxRmDir _wrmdir
- #if wxHAS_HUGE_FILES
- #define wxStat _wstati64
+ #else // !wxUSE_UNICODE_MSLU
+ #ifdef __BORLANDC__
+ #if __BORLANDC__ >= 0x550 && __BORLANDC__ <= 0x551
+ WXDLLIMPEXP_BASE int wxOpen(const wxChar *pathname,
+ int flags, mode_t mode);
+ #else
+ #define wxOpen _wopen
+ #endif
+ #define wxAccess _waccess
+ #define wxMkDir _wmkdir
+ #define wxRmDir _wrmdir
+ #ifdef wxHAS_HUGE_FILES
+ #define wxStat _wstati64
+ #else
+ #define wxStat _wstat
+ #endif
#else
- #define wxStat _wstat
+ #define wxOpen _wopen
+ #define wxAccess _waccess
+ #define wxMkDir _wmkdir
+ #define wxRmDir _wrmdir
+ #ifdef wxHAS_HUGE_FILES
+ #define wxStat _wstati64
+ #else
+ #define wxStat _wstat
+ #endif
#endif
- #endif
+ #endif // wxUSE_UNICODE_MSLU/!wxUSE_UNICODE_MSLU
#else // !wxUSE_UNICODE
- #ifdef __BORLANDC__
- #define wxOpen open
+ #define wxOpen wxPOSIX_IDENT(open)
+ #define wxAccess wxPOSIX_IDENT(access)
+ #define wxMkDir wxPOSIX_IDENT(mkdir)
+ #define wxRmDir wxPOSIX_IDENT(rmdir)
+ #ifdef wxHAS_HUGE_FILES
+ #define wxStat wxPOSIX_IDENT(stati64)
#else
- #define wxOpen _open
- #endif
- #define wxAccess _access
- #define wxMkDir _mkdir
- #ifdef __WATCOMC__
- #define wxRmDir rmdir
- #else
- #define wxRmDir _rmdir
- #endif
- #if wxHAS_HUGE_FILES
- #define wxStat _stati64
- #else
- #define wxStat _stat
+ #define wxStat wxPOSIX_IDENT(stat)
#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".
- #if wxHAS_HUGE_FILES
+ #ifdef wxHAS_HUGE_FILES
#if wxUSE_UNICODE && wxONLY_WATCOM_EARLIER_THAN(1,4)
#define wxStructStat struct _wstati64
#else
#endif
// constants (unless already defined by the user code)
- #if !defined(__BORLANDC__) && !defined(__WATCOMC__)
+ #ifdef wxHAS_UNDERSCORES_IN_POSIX_IDENTS
#ifndef O_RDONLY
#define O_RDONLY _O_RDONLY
#define O_WRONLY _O_WRONLY
#define S_IFDIR _S_IFDIR
#define S_IFREG _S_IFREG
#endif
- #endif
+ #endif // wxHAS_UNDERSCORES_IN_POSIX_IDENTS
- #if wxHAS_HUGE_FILES
+ #ifdef wxHAS_HUGE_FILES
// wxFile is present and supports large files. Currently wxFFile
// doesn't have large file support with any Windows compiler (even
// Win64 ones).
#if wxUSE_FILE
- #define WXFILE_LARGEFILE 1
+ #define wxHAS_LARGE_FILES
#endif
#endif
BadFileSizeType );
// wxFile is present and supports large files
#ifdef wxUSE_FILE
- #define WXFILE_LARGEFILE
+ #define wxHAS_LARGE_FILES
#endif
// wxFFile is present and supports large files
#if SIZEOF_LONG == 8 || defined HAVE_FSEEKO
- #define WXFFILE_LARGEFILE
+ #define wxHAS_LARGE_FFILES
#endif
#else
#define wxFileOffsetFmtSpec _T("")
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);
void AddEnvList(const wxString& envVariable);
// Adds given path to this list
- void Add(const wxString& path);
+ bool Add(const wxString& path);
void Add(const wxArrayString &paths);
// Find the first full path for which the file exists
wxString FindAbsoluteValidPath(const wxString& filename) const;
// Given full path and filename, add path to list
- void EnsureFileAccessible(const wxString& path);
+ bool EnsureFileAccessible(const wxString& path);
+#if WXWIN_COMPATIBILITY_2_6
// Returns true if the path is in the list
wxDEPRECATED( bool Member(const wxString& path) const );
+#endif
};
#endif // _WX_FILEFN_H_