X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/d5e71e81ecc15691d10b992867e08375c69c7b63..66c2bf7b1d9326fb650acfaae22ec50528cfbf7c:/include/wx/filefn.h diff --git a/include/wx/filefn.h b/include/wx/filefn.h index 0c0b020894..a5bcd7e3fc 100644 --- a/include/wx/filefn.h +++ b/include/wx/filefn.h @@ -4,7 +4,6 @@ // Author: Julian Smart // Modified by: // Created: 29/01/98 -// RCS-ID: $Id$ // Copyright: (c) 1998 Julian Smart // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -15,7 +14,6 @@ #include "wx/list.h" #include "wx/arrstr.h" -#ifndef __WXPALMOS5__ #ifdef __WXWINCE__ #include "wx/msw/wince/time.h" #include "wx/msw/private.h" @@ -23,24 +21,10 @@ #include #endif -#ifdef __WXWINCE__ -// Nothing -#elif !defined(__MWERKS__) +#ifndef __WXWINCE__ #include #include -#else - #ifdef __MACH__ - #include - #include - #include - #include - #else - #include - #include - #include - #endif #endif -#endif // !__WXPALMOS5__ #ifdef __OS2__ // need to check for __OS2__ first since currently both @@ -60,7 +44,7 @@ #endif #if defined(__WINDOWS__) && !defined(__WXMICROWIN__) -#if !defined( __GNUWIN32__ ) && !defined( __MWERKS__ ) && !defined(__WXWINCE__) && !defined(__CYGWIN__) +#if !defined( __GNUWIN32__ ) && !defined(__WXWINCE__) && !defined(__CYGWIN__) #include #include #include @@ -85,16 +69,15 @@ #include #endif -#ifndef __WXPALMOS5__ #ifndef __WXWINCE__ #include // O_RDONLY &c #endif -#endif // !__WXPALMOS5__ + // ---------------------------------------------------------------------------- // constants // ---------------------------------------------------------------------------- -#if defined(__VISUALC__) || defined(__DIGITALMARS__) +#if defined(__VISUALC__) || defined(__INTELC__) || defined(__DIGITALMARS__) typedef int mode_t; #endif @@ -109,14 +92,10 @@ #endif #endif -#if (defined(__VISUALC__) && !defined(__WXWINCE__)) || ( defined(__MWERKS__) && defined( __INTEL__) ) +#if defined(__VISUALC__) && !defined(__WXWINCE__) typedef _off_t off_t; #elif defined(__SYMANTEC__) 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 @@ -134,6 +113,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 @@ -143,9 +167,10 @@ enum wxFileKind // 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 wxCRT_Chmod(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); @@ -160,19 +185,20 @@ enum wxFileKind #define wxCRT_RmDir _wrmdir #define wxCRT_Stat _wstat #define wxStructStat struct _stat -#elif (defined(__WXMSW__) || defined(__OS2__)) && !defined(__WXPALMOS__) && \ +#elif (defined(__WINDOWS__) || defined(__OS2__)) && \ ( \ defined(__VISUALC__) || \ defined(__MINGW64__) || \ (defined(__MINGW32__) && !defined(__WINE__) && \ wxCHECK_W32API_VERSION(0, 5)) || \ - defined(__MWERKS__) || \ defined(__DMC__) || \ defined(__WATCOMC__) || \ 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,9 +209,19 @@ enum wxFileKind #define wxHAS_HUGE_FILES 1 #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 + // 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, and Borland) don't have huge file + // support (or at least not all functions needed for it by wx) currently // types @@ -256,20 +292,8 @@ enum wxFileKind // complications #define wxClose wxPOSIX_IDENT(close) - #if defined(__MWERKS__) - #if __MSL__ >= 0x6000 - #define wxRead(fd, buf, nCount) _read(fd, (void *)buf, nCount) - #define wxWrite(fd, buf, nCount) _write(fd, (void *)buf, nCount) - #else - #define wxRead(fd, buf, nCount)\ - _read(fd, (const char *)buf, nCount) - #define wxWrite(fd, buf, nCount)\ - _write(fd, (const char *)buf, nCount) - #endif - #else // __MWERKS__ - #define wxRead wxPOSIX_IDENT(read) - #define wxWrite wxPOSIX_IDENT(write) - #endif + #define wxRead wxPOSIX_IDENT(read) + #define wxWrite wxPOSIX_IDENT(write) #ifdef wxHAS_HUGE_FILES #ifndef __MINGW64__ @@ -307,10 +331,17 @@ enum wxFileKind // first the ANSI versions #define wxCRT_OpenA wxPOSIX_IDENT(open) #define wxCRT_AccessA wxPOSIX_IDENT(access) + #define wxCRT_ChmodA wxPOSIX_IDENT(chmod) #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__) @@ -332,6 +363,7 @@ enum wxFileKind #endif #define wxCRT_AccessW _waccess + #define wxCRT_ChmodW _wchmod #define wxCRT_MkDirW _wmkdir #define wxCRT_RmDirW _wrmdir #ifdef wxHAS_HUGE_FILES @@ -344,12 +376,14 @@ enum wxFileKind // 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 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__wchmod(const wxChar *name, + int mode); WXDLLIMPEXP_BASE int wxMSLU__wmkdir(const wxChar *name); WXDLLIMPEXP_BASE int wxMSLU__wrmdir(const wxChar *name); @@ -359,12 +393,14 @@ enum wxFileKind #define wxCRT_Open wxMSLU__wopen #define wxCRT_Access wxMSLU__waccess + #define wxCRT_Chmod wxMSLU__wchmod #define wxCRT_MkDir wxMSLU__wmkdir #define wxCRT_RmDir wxMSLU__wrmdir #define wxCRT_Stat wxMSLU__wstat #else // !wxUSE_UNICODE_MSLU #define wxCRT_Open wxCRT_OpenW #define wxCRT_Access wxCRT_AccessW + #define wxCRT_Chmod wxCRT_ChmodW #define wxCRT_MkDir wxCRT_MkDirW #define wxCRT_RmDir wxCRT_RmDirW #define wxCRT_Stat wxCRT_StatW @@ -372,6 +408,7 @@ enum wxFileKind #else // !wxUSE_UNICODE #define wxCRT_Open wxCRT_OpenA #define wxCRT_Access wxCRT_AccessA + #define wxCRT_Chmod wxCRT_ChmodA #define wxCRT_MkDir wxCRT_MkDirA #define wxCRT_RmDir wxCRT_RmDirA #define wxCRT_Stat wxCRT_StatA @@ -397,69 +434,39 @@ 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 -#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 + #undef wxHAS_HUGE_STDIO_FILES #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 @@ -481,6 +488,7 @@ enum wxFileKind #define wxCRT_Stat stat #define wxCRT_Lstat lstat #define wxCRT_Access access + #define wxCRT_Chmod chmod #define wxHAS_NATIVE_LSTAT #endif // platforms @@ -491,8 +499,19 @@ 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 wxChmod(const wxString& path, mode_t mode) + { return wxCRT_Chmod(path.fn_str(), mode); } inline int wxOpen(const wxString& path, int flags, mode_t mode) { return wxCRT_Open(path.fn_str(), flags, mode); } @@ -504,7 +523,8 @@ 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__)) +#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 @@ -637,7 +657,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); @@ -689,9 +709,6 @@ 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 @@ -725,6 +742,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,