wxFILE_KIND_PIPE // a pipe
};
+// we redefine these constants here because S_IREAD &c are _not_ standard
+// however, we do assume that the values correspond to the Unix umask bits
+enum wxPosixPermissions
+{
+ // standard Posix names for these permission flags:
+ wxS_IRUSR = 00400,
+ wxS_IWUSR = 00200,
+ wxS_IXUSR = 00100,
+
+ wxS_IRGRP = 00040,
+ wxS_IWGRP = 00020,
+ wxS_IXGRP = 00010,
+
+ wxS_IROTH = 00004,
+ wxS_IWOTH = 00002,
+ wxS_IXOTH = 00001,
+
+ // longer but more readable synonyms for the constants above:
+ wxPOSIX_USER_READ = wxS_IRUSR,
+ wxPOSIX_USER_WRITE = wxS_IWUSR,
+ wxPOSIX_USER_EXECUTE = wxS_IXUSR,
+
+ wxPOSIX_GROUP_READ = wxS_IRGRP,
+ wxPOSIX_GROUP_WRITE = wxS_IWGRP,
+ wxPOSIX_GROUP_EXECUTE = wxS_IXGRP,
+
+ wxPOSIX_OTHERS_READ = wxS_IROTH,
+ wxPOSIX_OTHERS_WRITE = wxS_IWOTH,
+ wxPOSIX_OTHERS_EXECUTE = wxS_IXOTH,
+
+ // default mode for the new files: allow reading/writing them to everybody but
+ // the effective file mode will be set after anding this value with umask and
+ // so won't include wxS_IW{GRP,OTH} for the default 022 umask value
+ wxS_DEFAULT = (wxPOSIX_USER_READ | wxPOSIX_USER_WRITE | \
+ wxPOSIX_GROUP_READ | wxPOSIX_GROUP_WRITE | \
+ wxPOSIX_OTHERS_READ | wxPOSIX_OTHERS_WRITE),
+
+ // default mode for the new directories (see wxFileName::Mkdir): allow
+ // reading/writing/executing them to everybody, but just like wxS_DEFAULT
+ // the effective directory mode will be set after anding this value with umask
+ wxS_DIR_DEFAULT = (wxPOSIX_USER_READ | wxPOSIX_USER_WRITE | wxPOSIX_USER_EXECUTE | \
+ wxPOSIX_GROUP_READ | wxPOSIX_GROUP_WRITE | wxPOSIX_GROUP_EXECUTE | \
+ wxPOSIX_OTHERS_READ | wxPOSIX_OTHERS_WRITE | wxPOSIX_OTHERS_EXECUTE)
+};
+
// ----------------------------------------------------------------------------
// declare our versions of low level file functions: some compilers prepend
// underscores to the usual names, some also have Unicode versions of them
// Implemented in filefnwce.cpp
#if defined( __WXWINCE__)
typedef __int64 wxFileOffset;
- #define wxFileOffsetFmtSpec _("I64")
+ #define wxFileOffsetFmtSpec wxT("I64")
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);
defined(__BORLANDC__) \
)
+ // temporary defines just used immediately below
#undef wxHAS_HUGE_FILES
+ #undef wxHAS_HUGE_STDIO_FILES
// detect compilers which have support for huge files
#if defined(__VISUALC__)
#define wxHAS_HUGE_FILES 1
#endif
+ // detect compilers which have support for huge stdio files
+ #if wxCHECK_VISUALC_VERSION(8)
+ #define wxHAS_HUGE_STDIO_FILES
+ #define wxFseek _fseeki64
+ #define wxFtell _ftelli64
+ #elif wxCHECK_MINGW32_VERSION(3, 5) // mingw-runtime version (not gcc)
+ #define wxHAS_HUGE_STDIO_FILES
+ #define wxFseek fseeko64
+ #define wxFtell ftello64
+ #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
#define wxCRT_MkDirA wxPOSIX_IDENT(mkdir)
#define wxCRT_RmDirA wxPOSIX_IDENT(rmdir)
#ifdef wxHAS_HUGE_FILES
- #define wxCRT_StatA wxPOSIX_IDENT(stati64)
+ // MinGW-64 provides underscore-less versions of all file functions
+ // except for this one.
+ #ifdef __MINGW64__
+ #define wxCRT_StatA _stati64
+ #else
+ #define wxCRT_StatA wxPOSIX_IDENT(stati64)
+ #endif
#else
// Unfortunately Watcom is not consistent
#if defined(__OS2__) && defined(__WATCOMC__)
// finally the default char-type versions
#if wxUSE_UNICODE
- #if wxUSE_UNICODE_MSLU || defined(__STRICT_ANSI__)
+ #if wxUSE_UNICODE_MSLU || defined(__WX_STRICT_ANSI_GCC__)
// implement the missing file functions in Win9x ourselves
WXDLLIMPEXP_BASE int wxMSLU__wopen(const wxChar *name,
int flags, int mode);
#endif // wxHAS_UNDERSCORES_IN_POSIX_IDENTS
#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).
+ // wxFile is present and supports large files.
#if wxUSE_FILE
#define wxHAS_LARGE_FILES
#endif
+ // wxFFile is present and supports large files
+ #if wxUSE_FFILE && defined wxHAS_HUGE_STDIO_FILES
+ #define wxHAS_LARGE_FFILES
+ #endif
#endif
- // it's a private define, undefine it so that nobody gets tempted to use it
+ // private defines, undefine so that nobody gets tempted to use
#undef wxHAS_HUGE_FILES
+ #undef wxHAS_HUGE_STDIO_FILES
#elif defined (__WXPALMOS__)
typedef off_t wxFileOffset;
#ifdef _LARGE_FILES
#if wxUSE_FFILE && (SIZEOF_LONG == 8 || defined HAVE_FSEEKO)
#define wxHAS_LARGE_FFILES
#endif
+ #ifdef HAVE_FSEEKO
+ #define wxFseek fseeko
+ #define wxFtell ftello
+ #endif
#else
#define wxFileOffsetFmtSpec wxT("")
#endif
#define wxCRT_Lstat wxCRT_Stat
#endif
+// define wxFseek/wxFtell to large file versions if available (done above) or
+// to fseek/ftell if not, to save ifdefs in using code
+#ifndef wxFseek
+ #define wxFseek fseek
+#endif
+#ifndef wxFtell
+ #define wxFtell ftell
+#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_Lstat(path.fn_str(), buf); }
inline int wxRmDir(const wxString& path)
{ return wxCRT_RmDir(path.fn_str()); }
-#if defined(__WINDOWS__) || (defined(__OS2__) && defined(__WATCOMC__))
+#if (defined(__WINDOWS__) && !defined(__CYGWIN__)) \
+ || (defined(__OS2__) && defined(__WATCOMC__))
inline int wxMkDir(const wxString& path, mode_t WXUNUSED(mode) = 0)
{ return wxCRT_MkDir(path.fn_str()); }
#else
WXDLLIMPEXP_BASE bool wxSetWorkingDirectory(const wxString& d);
// Make directory
-WXDLLIMPEXP_BASE bool wxMkdir(const wxString& dir, int perm = 0777);
+WXDLLIMPEXP_BASE bool wxMkdir(const wxString& dir, int perm = wxS_DIR_DEFAULT);
// Remove directory. Flags reserved for future use.
WXDLLIMPEXP_BASE bool wxRmdir(const wxString& dir, int flags = 0);