X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/4bf3e3a702a5bec15888db7bf535a297e57b47fb..d0332cbc07d487c30d83515fb3351790565ec1de:/include/wx/filefn.h?ds=sidebyside diff --git a/include/wx/filefn.h b/include/wx/filefn.h index 892db0ec6f..2f05143559 100644 --- a/include/wx/filefn.h +++ b/include/wx/filefn.h @@ -134,6 +134,51 @@ enum wxFileKind 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 @@ -172,7 +217,9 @@ enum wxFileKind 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__) @@ -183,6 +230,17 @@ enum wxFileKind #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 @@ -303,86 +361,81 @@ enum wxFileKind #define wxEof wxPOSIX_IDENT(eof) // then the functions taking strings + + // first the ANSI versions + #define wxCRT_OpenA wxPOSIX_IDENT(open) + #define wxCRT_AccessA wxPOSIX_IDENT(access) + #define wxCRT_MkDirA wxPOSIX_IDENT(mkdir) + #define wxCRT_RmDirA wxPOSIX_IDENT(rmdir) + #ifdef wxHAS_HUGE_FILES + #define wxCRT_StatA wxPOSIX_IDENT(stati64) + #else + // Unfortunately Watcom is not consistent + #if defined(__OS2__) && defined(__WATCOMC__) + #define wxCRT_StatA _stat + #else + #define wxCRT_StatA wxPOSIX_IDENT(stat) + #endif + #endif + + // then wide char ones + #if wxUSE_UNICODE + // special workaround for buggy wopen() in bcc 5.5 + #if defined(__BORLANDC__) && \ + (__BORLANDC__ >= 0x550 && __BORLANDC__ <= 0x551) + WXDLLIMPEXP_BASE int wxCRT_OpenW(const wxChar *pathname, + int flags, mode_t mode); + #else + #define wxCRT_OpenW _wopen + #endif + + #define wxCRT_AccessW _waccess + #define wxCRT_MkDirW _wmkdir + #define wxCRT_RmDirW _wrmdir + #ifdef wxHAS_HUGE_FILES + #define wxCRT_StatW _wstati64 + #else + #define wxCRT_StatW _wstat + #endif + #endif // wxUSE_UNICODE + + + // finally the default char-type versions #if wxUSE_UNICODE - #if wxUSE_UNICODE_MSLU + #if wxUSE_UNICODE_MSLU || defined(__WX_STRICT_ANSI_GCC__) // 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); - - #ifdef wxHAS_HUGE_FILES - WXDLLIMPEXP_BASE int - wxMSLU__wstati64(const wxChar *name, wxStructStat *buffer); - #else // !wxHAS_HUGE_FILES - WXDLLIMPEXP_BASE int - wxMSLU__wstat(const wxChar *name, wxStructStat *buffer); - #endif // wxHAS_HUGE_FILES/!wxHAS_HUGE_FILES - #endif // Windows compilers with MSLU support + 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, wxStructStat *buffer); #define wxCRT_Open wxMSLU__wopen #define wxCRT_Access wxMSLU__waccess #define wxCRT_MkDir wxMSLU__wmkdir #define wxCRT_RmDir wxMSLU__wrmdir - #ifdef wxHAS_HUGE_FILES - #define wxCRT_Stat wxMSLU__wstati64 - #else - #define wxCRT_Stat wxMSLU__wstat - #endif + #define wxCRT_Stat wxMSLU__wstat #else // !wxUSE_UNICODE_MSLU - #ifdef __BORLANDC__ - #if __BORLANDC__ >= 0x550 && __BORLANDC__ <= 0x551 - WXDLLIMPEXP_BASE int wxCRT_Open(const wxChar *pathname, - int flags, mode_t mode); - #else - #define wxCRT_Open _wopen - #endif - #define wxCRT_Access _waccess - #define wxCRT_MkDir _wmkdir - #define wxCRT_RmDir _wrmdir - #ifdef wxHAS_HUGE_FILES - #define wxCRT_Stat _wstati64 - #else - #define wxCRT_Stat _wstat - #endif - #else - #define wxCRT_Open _wopen - #define wxCRT_Access _waccess - #define wxCRT_MkDir _wmkdir - #define wxCRT_RmDir _wrmdir - #ifdef wxHAS_HUGE_FILES - #define wxCRT_Stat _wstati64 - #else - #define wxCRT_Stat _wstat - #endif - #endif + #define wxCRT_Open wxCRT_OpenW + #define wxCRT_Access wxCRT_AccessW + #define wxCRT_MkDir wxCRT_MkDirW + #define wxCRT_RmDir wxCRT_RmDirW + #define wxCRT_Stat wxCRT_StatW #endif // wxUSE_UNICODE_MSLU/!wxUSE_UNICODE_MSLU #else // !wxUSE_UNICODE - #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 wxCRT_Stat wxPOSIX_IDENT(stati64) - #else - // Unfortunately Watcom is not consistent, so:- - #if defined(__OS2__) && defined(__WATCOMC__) - #define wxCRT_Stat _stat - #else - #define wxCRT_Stat wxPOSIX_IDENT(stat) - #endif - #endif + #define wxCRT_Open wxCRT_OpenA + #define wxCRT_Access wxCRT_AccessA + #define wxCRT_MkDir wxCRT_MkDirA + #define wxCRT_RmDir wxCRT_RmDirA + #define wxCRT_Stat wxCRT_StatA #endif // wxUSE_UNICODE/!wxUSE_UNICODE + // constants (unless already defined by the user code) #ifdef wxHAS_UNDERSCORES_IN_POSIX_IDENTS #ifndef O_RDONLY @@ -402,16 +455,19 @@ enum wxFileKind #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 @@ -426,7 +482,7 @@ enum wxFileKind #define wxHAS_LARGE_FFILES #endif #else - #define wxFileOffsetFmtSpec _T("") + #define wxFileOffsetFmtSpec wxT("") #endif #define wxClose close #define wxRead ::read @@ -451,20 +507,24 @@ enum wxFileKind #define wxHAS_NATIVE_LSTAT #else // Unix or Windows using unknown compiler, assume POSIX supported typedef off_t wxFileOffset; - #ifdef _LARGE_FILES + #ifdef HAVE_LARGEFILE_SUPPORT #define wxFileOffsetFmtSpec wxLongLongFmtSpec wxCOMPILE_TIME_ASSERT( sizeof(off_t) == sizeof(wxLongLong_t), BadFileSizeType ); // wxFile is present and supports large files - #ifdef wxUSE_FILE + #if wxUSE_FILE #define wxHAS_LARGE_FILES #endif // wxFFile is present and supports large files - #if SIZEOF_LONG == 8 || defined HAVE_FSEEKO + #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 _T("") + #define wxFileOffsetFmtSpec wxT("") #endif // functions #define wxClose close @@ -496,6 +556,15 @@ enum wxFileKind #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) @@ -642,7 +711,7 @@ WXDLLIMPEXP_BASE wxString wxGetCwd(); 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); @@ -730,6 +799,7 @@ WXDLLIMPEXP_BASE bool wxEndsWithPathSeparator(const wxString& filename); #if WXWIN_COMPATIBILITY_2_8 // split the full path into path (including drive for DOS), name and extension // (understands both '/' and '\\') +// Deprecated in favour of wxFileName::SplitPath wxDEPRECATED( WXDLLIMPEXP_BASE void wxSplitPath(const wxString& fileName, wxString *pstrPath, wxString *pstrName,