Add wxFileName::SetPermissions().
This is a simple wrapper for the POSIX chmod(). Closes #12951. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@74639 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -563,6 +563,7 @@ Major new features in this release
|
||||
All:
|
||||
|
||||
- Allow using custom HTTP methods with wxHTTP (Kolya Kosenko).
|
||||
- Add wxFileName::SetPermissions() (Catalin Raceanu).
|
||||
- Fix build with wxUSE_FFILE==0 (jroemmler).
|
||||
|
||||
All (GUI):
|
||||
|
@@ -170,6 +170,7 @@ enum wxPosixPermissions
|
||||
#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);
|
||||
@@ -330,6 +331,7 @@ enum wxPosixPermissions
|
||||
// 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
|
||||
@@ -361,6 +363,7 @@ enum wxPosixPermissions
|
||||
#endif
|
||||
|
||||
#define wxCRT_AccessW _waccess
|
||||
#define wxCRT_ChmodW _wchmod
|
||||
#define wxCRT_MkDirW _wmkdir
|
||||
#define wxCRT_RmDirW _wrmdir
|
||||
#ifdef wxHAS_HUGE_FILES
|
||||
@@ -379,6 +382,8 @@ enum wxPosixPermissions
|
||||
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);
|
||||
|
||||
@@ -388,12 +393,14 @@ enum wxPosixPermissions
|
||||
#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
|
||||
@@ -401,6 +408,7 @@ enum wxPosixPermissions
|
||||
#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
|
||||
@@ -480,6 +488,7 @@ enum wxPosixPermissions
|
||||
#define wxCRT_Stat stat
|
||||
#define wxCRT_Lstat lstat
|
||||
#define wxCRT_Access access
|
||||
#define wxCRT_Chmod chmod
|
||||
|
||||
#define wxHAS_NATIVE_LSTAT
|
||||
#endif // platforms
|
||||
@@ -501,6 +510,8 @@ enum wxPosixPermissions
|
||||
|
||||
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); }
|
||||
|
||||
|
@@ -11,17 +11,6 @@
|
||||
#ifndef _WX_FILENAME_H_
|
||||
#define _WX_FILENAME_H_
|
||||
|
||||
/*
|
||||
TODO:
|
||||
|
||||
1. support for drives under Windows
|
||||
2. more file operations:
|
||||
a) chmod()
|
||||
b) [acm]time() - get and set
|
||||
c) rename()?
|
||||
3. SameFileAs() function to compare inodes under Unix
|
||||
*/
|
||||
|
||||
#include "wx/arrstr.h"
|
||||
#include "wx/filefn.h"
|
||||
#include "wx/datetime.h"
|
||||
@@ -265,6 +254,10 @@ public:
|
||||
bool IsFileExecutable() const { return wxIsExecutable(GetFullPath()); }
|
||||
static bool IsFileExecutable(const wxString &path) { return wxFileExists(path) && wxIsExecutable(path); }
|
||||
|
||||
// set the file permissions to a combination of wxPosixPermissions enum
|
||||
// values
|
||||
bool SetPermissions(int permissions);
|
||||
|
||||
|
||||
// time functions
|
||||
#if wxUSE_DATETIME
|
||||
|
@@ -1256,6 +1256,23 @@ public:
|
||||
*/
|
||||
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).
|
||||
|
@@ -2572,6 +2572,37 @@ wxString wxFileName::StripExtension(const wxString& fullpath)
|
||||
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
|
||||
// ----------------------------------------------------------------------------
|
||||
|
@@ -199,6 +199,14 @@ WXDLLIMPEXP_BASE int wxMSLU__waccess(const wchar_t *name, int mode)
|
||||
return wxCRT_AccessW(name, mode);
|
||||
}
|
||||
|
||||
WXDLLIMPEXP_BASE int wxMSLU__wchmod(const wchar_t *name, int mode)
|
||||
{
|
||||
if ( wxUsingUnicowsDll() )
|
||||
return wxCRT_ChmodA(wxConvFile.cWX2MB(name), mode);
|
||||
else
|
||||
return wxCRT_ChmodW(name, mode);
|
||||
}
|
||||
|
||||
WXDLLIMPEXP_BASE int wxMSLU__wmkdir(const wchar_t *name)
|
||||
{
|
||||
if ( wxUsingUnicowsDll() )
|
||||
|
@@ -112,6 +112,12 @@ int wxCRT_Access(const wxChar *name, int WXUNUSED(how))
|
||||
return 0;
|
||||
}
|
||||
|
||||
int wxCRT_Chmod(const wxChar *WXUNUSED(name), int WXUNUSED(how))
|
||||
{
|
||||
// TODO
|
||||
return -1;
|
||||
}
|
||||
|
||||
int wxClose(int fd)
|
||||
{
|
||||
if (CloseHandle((HANDLE)fd))
|
||||
|
Reference in New Issue
Block a user