#define wxRmDir _wrmdir
#define wxStat _wstat
#define wxStructStat struct _stat
-
-// Microsoft compiler loves underscores, feed them to it
-#elif defined( __VISUALC__ ) \
- || ( defined(__MINGW32__) && !defined(__WINE__) && wxCHECK_W32API_VERSION( 0, 5 ) ) \
- || ( defined(__MWERKS__) && defined(__WXMSW__) ) \
- || ( defined(__DMC__) && defined(__WXMSW__) ) \
- || ( defined(__WATCOMC__) && defined(__WXMSW__) )
-
- // detect compilers which have support for huge files (currently only
- // Digital Mars doesn't)
- #ifndef __WXPALMOS__
- #include "wx/msw/private.h"
- #endif
+#elif defined(__WXMSW__) && !defined(__WXPALMOS__) && \
+ ( \
+ defined(__VISUALC__) || \
+ (defined(__MINGW32__) && !defined(__WINE__) && \
+ wxCHECK_W32API_VERSION(0, 5)) || \
+ defined(__MWERKS__) || \
+ defined(__DMC__) || \
+ defined(__WATCOMC__) || \
+ defined(__BORLANDC__) \
+ )
#undef wxHAS_HUGE_FILES
- #if defined(__MINGW32__)
+
+ // 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))
#define wxHAS_HUGE_FILES 1
- #elif defined(__MWERKS__)
- #define wxHAS_HUGE_FILES 0
- #elif defined(__DMC__)
- #define wxHAS_HUGE_FILES 0
- #elif ((_INTEGRAL_MAX_BITS >= 64) || defined(_LARGE_FILES))
+ #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
#endif
#define wxRead ::read
#define wxWrite ::write
#else
- #define wxRead _read
+ #define wxRead _read
#define wxWrite _write
#endif
#endif
#if wxHAS_HUGE_FILES
- #define wxSeek _lseeki64
+ #define wxSeek _lseeki64
#define wxLseek _lseeki64
#define wxTell _telli64
- #else
- #define wxSeek _lseek
+ #else // !wxHAS_HUGE_FILES
+ #define wxSeek _lseek
#define wxLseek _lseek
#define wxTell _tell
- #endif
+ #endif // wxHAS_HUGE_FILES/!wxHAS_HUGE_FILES
+
#define wxFsync _commit
+
#if defined(__WATCOMC__)
#define wxEof ::eof
#else
#else
#define wxStat _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.
#endif
// constants (unless already defined by the user code)
- #if !defined(__BORLANDC__) && !defined(__WATCOMC__) && !defined(__WXPALMOS__)
+ #if !defined(__BORLANDC__) && !defined(__WATCOMC__)
#ifndef O_RDONLY
#define O_RDONLY _O_RDONLY
#define O_WRONLY _O_WRONLY
#endif
#endif
- // It's a private define, undefine it so nobody gets tempted to use it
+ #if 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 wxHAS_LARGE_FILES
+ #endif
+ #endif
+
+ // it's a private define, undefine it so that nobody gets tempted to use it
#undef wxHAS_HUGE_FILES
-#else // Unix platforms using configure
+#else // Unix or Windows using unknown compiler, assume POSIX supported
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
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 wxHAS_NATIVE_LSTAT
#endif // platforms
+#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
}
#endif //WXWIN_COMPATIBILITY_2_6
+// permissions; these functions work both on files and directories:
+WXDLLIMPEXP_BASE bool wxIsWritable(const wxString &path);
+WXDLLIMPEXP_BASE bool wxIsReadable(const wxString &path);
+WXDLLIMPEXP_BASE bool wxIsExecutable(const wxString &path);
+
// ----------------------------------------------------------------------------
// separators in file names
// ----------------------------------------------------------------------------