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:
|
All:
|
||||||
|
|
||||||
- Allow using custom HTTP methods with wxHTTP (Kolya Kosenko).
|
- Allow using custom HTTP methods with wxHTTP (Kolya Kosenko).
|
||||||
|
- Add wxFileName::SetPermissions() (Catalin Raceanu).
|
||||||
- Fix build with wxUSE_FFILE==0 (jroemmler).
|
- Fix build with wxUSE_FFILE==0 (jroemmler).
|
||||||
|
|
||||||
All (GUI):
|
All (GUI):
|
||||||
|
@@ -170,6 +170,7 @@ enum wxPosixPermissions
|
|||||||
#define wxFileOffsetFmtSpec wxT("I64")
|
#define wxFileOffsetFmtSpec wxT("I64")
|
||||||
WXDLLIMPEXP_BASE int wxCRT_Open(const wxChar *filename, int oflag, int WXUNUSED(pmode));
|
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_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 wxClose(int fd);
|
||||||
WXDLLIMPEXP_BASE int wxFsync(int WXUNUSED(fd));
|
WXDLLIMPEXP_BASE int wxFsync(int WXUNUSED(fd));
|
||||||
WXDLLIMPEXP_BASE int wxRead(int fd, void *buf, unsigned int count);
|
WXDLLIMPEXP_BASE int wxRead(int fd, void *buf, unsigned int count);
|
||||||
@@ -330,6 +331,7 @@ enum wxPosixPermissions
|
|||||||
// first the ANSI versions
|
// first the ANSI versions
|
||||||
#define wxCRT_OpenA wxPOSIX_IDENT(open)
|
#define wxCRT_OpenA wxPOSIX_IDENT(open)
|
||||||
#define wxCRT_AccessA wxPOSIX_IDENT(access)
|
#define wxCRT_AccessA wxPOSIX_IDENT(access)
|
||||||
|
#define wxCRT_ChmodA wxPOSIX_IDENT(chmod)
|
||||||
#define wxCRT_MkDirA wxPOSIX_IDENT(mkdir)
|
#define wxCRT_MkDirA wxPOSIX_IDENT(mkdir)
|
||||||
#define wxCRT_RmDirA wxPOSIX_IDENT(rmdir)
|
#define wxCRT_RmDirA wxPOSIX_IDENT(rmdir)
|
||||||
#ifdef wxHAS_HUGE_FILES
|
#ifdef wxHAS_HUGE_FILES
|
||||||
@@ -361,6 +363,7 @@ enum wxPosixPermissions
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define wxCRT_AccessW _waccess
|
#define wxCRT_AccessW _waccess
|
||||||
|
#define wxCRT_ChmodW _wchmod
|
||||||
#define wxCRT_MkDirW _wmkdir
|
#define wxCRT_MkDirW _wmkdir
|
||||||
#define wxCRT_RmDirW _wrmdir
|
#define wxCRT_RmDirW _wrmdir
|
||||||
#ifdef wxHAS_HUGE_FILES
|
#ifdef wxHAS_HUGE_FILES
|
||||||
@@ -379,6 +382,8 @@ enum wxPosixPermissions
|
|||||||
int flags, int mode);
|
int flags, int mode);
|
||||||
WXDLLIMPEXP_BASE int wxMSLU__waccess(const wxChar *name,
|
WXDLLIMPEXP_BASE int wxMSLU__waccess(const wxChar *name,
|
||||||
int mode);
|
int mode);
|
||||||
|
WXDLLIMPEXP_BASE int wxMSLU__wchmod(const wxChar *name,
|
||||||
|
int mode);
|
||||||
WXDLLIMPEXP_BASE int wxMSLU__wmkdir(const wxChar *name);
|
WXDLLIMPEXP_BASE int wxMSLU__wmkdir(const wxChar *name);
|
||||||
WXDLLIMPEXP_BASE int wxMSLU__wrmdir(const wxChar *name);
|
WXDLLIMPEXP_BASE int wxMSLU__wrmdir(const wxChar *name);
|
||||||
|
|
||||||
@@ -388,12 +393,14 @@ enum wxPosixPermissions
|
|||||||
#define wxCRT_Open wxMSLU__wopen
|
#define wxCRT_Open wxMSLU__wopen
|
||||||
|
|
||||||
#define wxCRT_Access wxMSLU__waccess
|
#define wxCRT_Access wxMSLU__waccess
|
||||||
|
#define wxCRT_Chmod wxMSLU__wchmod
|
||||||
#define wxCRT_MkDir wxMSLU__wmkdir
|
#define wxCRT_MkDir wxMSLU__wmkdir
|
||||||
#define wxCRT_RmDir wxMSLU__wrmdir
|
#define wxCRT_RmDir wxMSLU__wrmdir
|
||||||
#define wxCRT_Stat wxMSLU__wstat
|
#define wxCRT_Stat wxMSLU__wstat
|
||||||
#else // !wxUSE_UNICODE_MSLU
|
#else // !wxUSE_UNICODE_MSLU
|
||||||
#define wxCRT_Open wxCRT_OpenW
|
#define wxCRT_Open wxCRT_OpenW
|
||||||
#define wxCRT_Access wxCRT_AccessW
|
#define wxCRT_Access wxCRT_AccessW
|
||||||
|
#define wxCRT_Chmod wxCRT_ChmodW
|
||||||
#define wxCRT_MkDir wxCRT_MkDirW
|
#define wxCRT_MkDir wxCRT_MkDirW
|
||||||
#define wxCRT_RmDir wxCRT_RmDirW
|
#define wxCRT_RmDir wxCRT_RmDirW
|
||||||
#define wxCRT_Stat wxCRT_StatW
|
#define wxCRT_Stat wxCRT_StatW
|
||||||
@@ -401,6 +408,7 @@ enum wxPosixPermissions
|
|||||||
#else // !wxUSE_UNICODE
|
#else // !wxUSE_UNICODE
|
||||||
#define wxCRT_Open wxCRT_OpenA
|
#define wxCRT_Open wxCRT_OpenA
|
||||||
#define wxCRT_Access wxCRT_AccessA
|
#define wxCRT_Access wxCRT_AccessA
|
||||||
|
#define wxCRT_Chmod wxCRT_ChmodA
|
||||||
#define wxCRT_MkDir wxCRT_MkDirA
|
#define wxCRT_MkDir wxCRT_MkDirA
|
||||||
#define wxCRT_RmDir wxCRT_RmDirA
|
#define wxCRT_RmDir wxCRT_RmDirA
|
||||||
#define wxCRT_Stat wxCRT_StatA
|
#define wxCRT_Stat wxCRT_StatA
|
||||||
@@ -480,6 +488,7 @@ enum wxPosixPermissions
|
|||||||
#define wxCRT_Stat stat
|
#define wxCRT_Stat stat
|
||||||
#define wxCRT_Lstat lstat
|
#define wxCRT_Lstat lstat
|
||||||
#define wxCRT_Access access
|
#define wxCRT_Access access
|
||||||
|
#define wxCRT_Chmod chmod
|
||||||
|
|
||||||
#define wxHAS_NATIVE_LSTAT
|
#define wxHAS_NATIVE_LSTAT
|
||||||
#endif // platforms
|
#endif // platforms
|
||||||
@@ -501,6 +510,8 @@ enum wxPosixPermissions
|
|||||||
|
|
||||||
inline int wxAccess(const wxString& path, mode_t mode)
|
inline int wxAccess(const wxString& path, mode_t mode)
|
||||||
{ return wxCRT_Access(path.fn_str(), 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)
|
inline int wxOpen(const wxString& path, int flags, mode_t mode)
|
||||||
{ return wxCRT_Open(path.fn_str(), flags, mode); }
|
{ return wxCRT_Open(path.fn_str(), flags, mode); }
|
||||||
|
|
||||||
|
@@ -11,17 +11,6 @@
|
|||||||
#ifndef _WX_FILENAME_H_
|
#ifndef _WX_FILENAME_H_
|
||||||
#define _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/arrstr.h"
|
||||||
#include "wx/filefn.h"
|
#include "wx/filefn.h"
|
||||||
#include "wx/datetime.h"
|
#include "wx/datetime.h"
|
||||||
@@ -265,6 +254,10 @@ public:
|
|||||||
bool IsFileExecutable() const { return wxIsExecutable(GetFullPath()); }
|
bool IsFileExecutable() const { return wxIsExecutable(GetFullPath()); }
|
||||||
static bool IsFileExecutable(const wxString &path) { return wxFileExists(path) && wxIsExecutable(path); }
|
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
|
// time functions
|
||||||
#if wxUSE_DATETIME
|
#if wxUSE_DATETIME
|
||||||
|
@@ -1256,6 +1256,23 @@ public:
|
|||||||
*/
|
*/
|
||||||
void SetPath(const wxString& path, wxPathFormat format = wxPATH_NATIVE);
|
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
|
Sets the file creation and last access/modification times (any of the pointers
|
||||||
may be @NULL).
|
may be @NULL).
|
||||||
|
@@ -2572,6 +2572,37 @@ wxString wxFileName::StripExtension(const wxString& fullpath)
|
|||||||
return fn.GetFullPath();
|
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
|
// time functions
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
@@ -199,6 +199,14 @@ WXDLLIMPEXP_BASE int wxMSLU__waccess(const wchar_t *name, int mode)
|
|||||||
return wxCRT_AccessW(name, 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)
|
WXDLLIMPEXP_BASE int wxMSLU__wmkdir(const wchar_t *name)
|
||||||
{
|
{
|
||||||
if ( wxUsingUnicowsDll() )
|
if ( wxUsingUnicowsDll() )
|
||||||
|
@@ -112,6 +112,12 @@ int wxCRT_Access(const wxChar *name, int WXUNUSED(how))
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int wxCRT_Chmod(const wxChar *WXUNUSED(name), int WXUNUSED(how))
|
||||||
|
{
|
||||||
|
// TODO
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
int wxClose(int fd)
|
int wxClose(int fd)
|
||||||
{
|
{
|
||||||
if (CloseHandle((HANDLE)fd))
|
if (CloseHandle((HANDLE)fd))
|
||||||
|
Reference in New Issue
Block a user