Diff
Modified: wxWidgets/trunk/docs/changes.txt (74638 => 74639)
--- wxWidgets/trunk/docs/changes.txt 2013-08-07 11:08:21 UTC (rev 74638)
+++ wxWidgets/trunk/docs/changes.txt 2013-08-07 11:08:28 UTC (rev 74639)
@@ -563,6 +563,7 @@
All:
- Allow using custom HTTP methods with wxHTTP (Kolya Kosenko).
+- Add wxFileName::SetPermissions() (Catalin Raceanu).
- Fix build with wxUSE_FFILE==0 (jroemmler).
All (GUI):
Modified: wxWidgets/trunk/include/wx/filefn.h (74638 => 74639)
--- wxWidgets/trunk/include/wx/filefn.h 2013-08-07 11:08:21 UTC (rev 74638)
+++ wxWidgets/trunk/include/wx/filefn.h 2013-08-07 11:08:28 UTC (rev 74639)
@@ -170,6 +170,7 @@
#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 @@
// 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 @@
#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 @@
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 @@
#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 @@
#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 @@
#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 @@
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); }
Modified: wxWidgets/trunk/include/wx/filename.h (74638 => 74639)
--- wxWidgets/trunk/include/wx/filename.h 2013-08-07 11:08:21 UTC (rev 74638)
+++ wxWidgets/trunk/include/wx/filename.h 2013-08-07 11:08:28 UTC (rev 74639)
@@ -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,7 +254,11 @@
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
// set the file last access/mod and creation times
Modified: wxWidgets/trunk/interface/wx/filename.h (74638 => 74639)
--- wxWidgets/trunk/interface/wx/filename.h 2013-08-07 11:08:21 UTC (rev 74638)
+++ wxWidgets/trunk/interface/wx/filename.h 2013-08-07 11:08:28 UTC (rev 74639)
@@ -1257,6 +1257,23 @@
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).
Modified: wxWidgets/trunk/src/common/filename.cpp (74638 => 74639)
--- wxWidgets/trunk/src/common/filename.cpp 2013-08-07 11:08:21 UTC (rev 74638)
+++ wxWidgets/trunk/src/common/filename.cpp 2013-08-07 11:08:28 UTC (rev 74639)
@@ -2573,6 +2573,37 @@
}
// ----------------------------------------------------------------------------
+// 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
// ----------------------------------------------------------------------------
Modified: wxWidgets/trunk/src/msw/mslu.cpp (74638 => 74639)
--- wxWidgets/trunk/src/msw/mslu.cpp 2013-08-07 11:08:21 UTC (rev 74638)
+++ wxWidgets/trunk/src/msw/mslu.cpp 2013-08-07 11:08:28 UTC (rev 74639)
@@ -199,6 +199,14 @@
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() )
Modified: wxWidgets/trunk/src/msw/wince/filefnwce.cpp (74638 => 74639)
--- wxWidgets/trunk/src/msw/wince/filefnwce.cpp 2013-08-07 11:08:21 UTC (rev 74638)
+++ wxWidgets/trunk/src/msw/wince/filefnwce.cpp 2013-08-07 11:08:28 UTC (rev 74639)
@@ -112,6 +112,12 @@
return 0;
}
+int wxCRT_Chmod(const wxChar *WXUNUSED(name), int WXUNUSED(how))
+{
+ // TODO
+ return -1;
+}
+
int wxClose(int fd)
{
if (CloseHandle((HANDLE)fd))