#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);
// 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
#endif
#define wxCRT_AccessW _waccess
+ #define wxCRT_ChmodW _wchmod
#define wxCRT_MkDirW _wmkdir
#define wxCRT_RmDirW _wrmdir
#ifdef wxHAS_HUGE_FILES
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);
#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
#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
#define wxCRT_Stat stat
#define wxCRT_Lstat lstat
#define wxCRT_Access access
+ #define wxCRT_Chmod chmod
#define wxHAS_NATIVE_LSTAT
#endif // platforms
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); }
*/
void SetPath(const wxString& path, wxPathFormat format = wxPATH_NATIVE);
+ /**
+ Sets permissions for this file or directory.
+
+ @param permissions
+ The new permissions: this should be a combination of
+ ::wxPosixPermissions enum elements.
+
+ @since 2.9.6
+
+ @note If this is a symbolic link and it should not be followed
+ this call will fail.
+
+ @return @true on success, @false if an error occurred (for example,
+ the file doesn't exist).
+ */
+ bool SetPermissions(int permissions)
+
/**
Sets the file creation and last access/modification times (any of the pointers
may be @NULL).
return fn.GetFullPath();
}
+// ----------------------------------------------------------------------------
+// file permissions functions
+// ----------------------------------------------------------------------------
+
+bool wxFileName::SetPermissions(int permissions)
+{
+ // Don't do anything for a symlink but first make sure it is one.
+ if ( m_dontFollowLinks &&
+ Exists(wxFILE_EXISTS_SYMLINK|wxFILE_EXISTS_NO_FOLLOW) )
+ {
+ // Looks like changing permissions for a symlinc is only supported
+ // on BSD where lchmod is present and correctly implemented.
+ // http://lists.gnu.org/archive/html/bug-coreutils/2009-09/msg00268.html
+ return false;
+ }
+
+#ifdef __WINDOWS__
+ int accMode = 0;
+
+ if ( permissions & (wxS_IRUSR|wxS_IRGRP|wxS_IROTH) )
+ accMode = _S_IREAD;
+
+ if ( permissions & (wxS_IWUSR|wxS_IWGRP|wxS_IWOTH) )
+ accMode |= _S_IWRITE;
+
+ permissions = accMode;
+#endif // __WINDOWS__
+
+ return wxChmod(GetFullPath(), permissions) == 0;
+}
+
// ----------------------------------------------------------------------------
// time functions
// ----------------------------------------------------------------------------