From f2346d3fd62de2307531c91062ff87a0cc97a42f Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Sat, 21 Oct 2006 15:18:38 +0000 Subject: [PATCH] don't use GetFileAttributesEx() which doesn't exist in Win95 and so prevented any wx program from even starting up there; besides it was unneeded anyhow git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@42202 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- src/common/filefn.cpp | 51 ++++++++++++++++++++----------------------- 1 file changed, 24 insertions(+), 27 deletions(-) diff --git a/src/common/filefn.cpp b/src/common/filefn.cpp index caaf99caf1..73c0a0c036 100644 --- a/src/common/filefn.cpp +++ b/src/common/filefn.cpp @@ -1771,38 +1771,35 @@ int WXDLLEXPORT wxParseCommonDialogsFilter(const wxString& filterStr, } #if defined( __WINDOWS__ ) -bool wxCheckGenericPermission(const wxString &path, DWORD access) +static bool wxCheckWin32Permission(const wxString& path, DWORD access) { // quoting the MSDN: "To obtain a handle to a directory, call the - // CreateFile function with the FILE_FLAG_BACKUP_SEMANTICS flag" - wxWinVersion ver = wxGetWinVersion(); + // CreateFile function with the FILE_FLAG_BACKUP_SEMANTICS flag", but this + // doesn't work under Win9x/ME but then it's not needed there anyhow bool isdir = wxDirExists(path); - if (isdir && (ver == wxWinVersion_95 || ver == wxWinVersion_98 || ver == wxWinVersion_ME)) + if ( isdir && wxGetOsVersion() == wxOS_WINDOWS_9X ) { - // however Win95/98/ME do not support FILE_FLAG_BACKUP_SEMANTICS... - if (access == GENERIC_READ) - { - WIN32_FILE_ATTRIBUTE_DATA data; - if (GetFileAttributesEx(path.c_str(), GetFileExInfoStandard, &data) == 0) - return false; // cannot query attributes - return (data.dwFileAttributes & FILE_ATTRIBUTE_READONLY) == 0; - } - - // FIXME: is it true that directories are always writable & executable on Win9X family ? + // FAT directories always allow all access, even if they have the + // readonly flag set return true; } - else - { - HANDLE h = CreateFile(path.c_str(), access, - FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, NULL, - OPEN_EXISTING, isdir ? FILE_FLAG_BACKUP_SEMANTICS : 0, NULL); - if (h != INVALID_HANDLE_VALUE) - CloseHandle(h); - return h != INVALID_HANDLE_VALUE; - } + HANDLE h = ::CreateFile + ( + path.c_str(), + access, + FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, + NULL, + OPEN_EXISTING, + isdir ? FILE_FLAG_BACKUP_SEMANTICS : 0, + NULL + ); + if ( h != INVALID_HANDLE_VALUE ) + CloseHandle(h); + + return h != INVALID_HANDLE_VALUE; } -#endif +#endif // __WINDOWS__ bool wxIsWritable(const wxString &path) { @@ -1810,7 +1807,7 @@ bool wxIsWritable(const wxString &path) // access() will take in count also symbolic links return access(wxConvFile.cWX2MB(path), W_OK) == 0; #elif defined( __WINDOWS__ ) - return wxCheckGenericPermission(path, GENERIC_WRITE); + return wxCheckWin32Permission(path, GENERIC_WRITE); #else wxUnusedVar(path); // TODO @@ -1824,7 +1821,7 @@ bool wxIsReadable(const wxString &path) // access() will take in count also symbolic links return access(wxConvFile.cWX2MB(path), R_OK) == 0; #elif defined( __WINDOWS__ ) - return wxCheckGenericPermission(path, GENERIC_READ); + return wxCheckWin32Permission(path, GENERIC_READ); #else wxUnusedVar(path); // TODO @@ -1838,7 +1835,7 @@ bool wxIsExecutable(const wxString &path) // access() will take in count also symbolic links return access(wxConvFile.cWX2MB(path), X_OK) == 0; #elif defined( __WINDOWS__ ) - return wxCheckGenericPermission(path, GENERIC_EXECUTE); + return wxCheckWin32Permission(path, GENERIC_EXECUTE); #else wxUnusedVar(path); // TODO -- 2.45.2