@@ -173,7 +173,9 @@ getpath_isdir(PyObject *Py_UNUSED(self), PyObject *args)
173173path = PyUnicode_AsWideCharString (pathobj ,NULL );
174174if (path ) {
175175#ifdef MS_WINDOWS
176- r = (GetFileAttributesW (path )& FILE_ATTRIBUTE_DIRECTORY ) ?Py_True :Py_False ;
176+ DWORD attr = GetFileAttributesW (path );
177+ r = (attr != INVALID_FILE_ATTRIBUTES )&&
178+ (attr & FILE_ATTRIBUTE_DIRECTORY ) ?Py_True :Py_False ;
177179#else
178180struct stat st ;
179181r = (_Py_wstat (path ,& st )== 0 )&& S_ISDIR (st .st_mode ) ?Py_True :Py_False ;
@@ -197,7 +199,9 @@ getpath_isfile(PyObject *Py_UNUSED(self), PyObject *args)
197199path = PyUnicode_AsWideCharString (pathobj ,NULL );
198200if (path ) {
199201#ifdef MS_WINDOWS
200- r = !(GetFileAttributesW (path )& FILE_ATTRIBUTE_DIRECTORY ) ?Py_True :Py_False ;
202+ DWORD attr = GetFileAttributesW (path );
203+ r = (attr != INVALID_FILE_ATTRIBUTES )&&
204+ !(attr & FILE_ATTRIBUTE_DIRECTORY ) ?Py_True :Py_False ;
201205#else
202206struct stat st ;
203207r = (_Py_wstat (path ,& st )== 0 )&& S_ISREG (st .st_mode ) ?Py_True :Py_False ;
@@ -223,7 +227,9 @@ getpath_isxfile(PyObject *Py_UNUSED(self), PyObject *args)
223227if (path ) {
224228#ifdef MS_WINDOWS
225229const wchar_t * ext ;
226- r = (GetFileAttributesW (path )& FILE_ATTRIBUTE_DIRECTORY )&&
230+ DWORD attr = GetFileAttributesW (path );
231+ r = (attr != INVALID_FILE_ATTRIBUTES )&&
232+ !(attr & FILE_ATTRIBUTE_DIRECTORY )&&
227233SUCCEEDED (PathCchFindExtension (path ,cchPath ,& ext ))&&
228234 (CompareStringOrdinal (ext ,-1 ,L".exe" ,-1 ,1 /* ignore case */ )== CSTR_EQUAL )
229235 ?Py_True :Py_False ;