Merged revisions 73675 via svnmerge from

svn+ssh://pythondev@svn.python.org/python/trunk

........
  r73675 | hirokazu.yamamoto | 2009-06-29 20:27:03 +0900 | 3 lines

  Issue #4856: Py_GetFileAttributesEx[AW] are not needed because GetFileAttributesEx[AW]
  won't fail with ERROR_CALL_NOT_IMPLEMENTED on win NT.
  Reviewed by Amaury Forgeot d'Arc.
........
This commit is contained in:
Hirokazu Yamamoto 2009-06-29 11:37:19 +00:00
parent 3d2eca0eda
commit 6fbdfdabb6
1 changed files with 2 additions and 58 deletions

View File

@ -1024,68 +1024,13 @@ attributes_from_dir_w(LPCWSTR pszFile, LPWIN32_FILE_ATTRIBUTE_DATA pfad)
return TRUE; return TRUE;
} }
static BOOL WINAPI
Py_GetFileAttributesExA(LPCSTR pszFile,
GET_FILEEX_INFO_LEVELS level,
LPVOID pv)
{
BOOL result;
LPWIN32_FILE_ATTRIBUTE_DATA pfad = pv;
/* First try to use the system's implementation, if that is
available and either succeeds to gives an error other than
that it isn't implemented. */
result = GetFileAttributesExA(pszFile, level, pv);
if (result || GetLastError() != ERROR_CALL_NOT_IMPLEMENTED)
return result;
/* It's either not present, or not implemented.
Emulate using FindFirstFile. */
if (level != GetFileExInfoStandard) {
SetLastError(ERROR_INVALID_PARAMETER);
return FALSE;
}
/* Use GetFileAttributes to validate that the file name
does not contain wildcards (which FindFirstFile would
accept). */
if (GetFileAttributesA(pszFile) == 0xFFFFFFFF)
return FALSE;
return attributes_from_dir(pszFile, pfad);
}
static BOOL WINAPI
Py_GetFileAttributesExW(LPCWSTR pszFile,
GET_FILEEX_INFO_LEVELS level,
LPVOID pv)
{
BOOL result;
LPWIN32_FILE_ATTRIBUTE_DATA pfad = pv;
/* First try to use the system's implementation, if that is
available and either succeeds to gives an error other than
that it isn't implemented. */
result = GetFileAttributesExW(pszFile, level, pv);
if (result || GetLastError() != ERROR_CALL_NOT_IMPLEMENTED)
return result;
/* It's either not present, or not implemented.
Emulate using FindFirstFile. */
if (level != GetFileExInfoStandard) {
SetLastError(ERROR_INVALID_PARAMETER);
return FALSE;
}
/* Use GetFileAttributes to validate that the file name
does not contain wildcards (which FindFirstFile would
accept). */
if (GetFileAttributesW(pszFile) == 0xFFFFFFFF)
return FALSE;
return attributes_from_dir_w(pszFile, pfad);
}
static int static int
win32_stat(const char* path, struct win32_stat *result) win32_stat(const char* path, struct win32_stat *result)
{ {
WIN32_FILE_ATTRIBUTE_DATA info; WIN32_FILE_ATTRIBUTE_DATA info;
int code; int code;
char *dot; char *dot;
/* XXX not supported on Win95 and NT 3.x */ if (!GetFileAttributesExA(path, GetFileExInfoStandard, &info)) {
if (!Py_GetFileAttributesExA(path, GetFileExInfoStandard, &info)) {
if (GetLastError() != ERROR_SHARING_VIOLATION) { if (GetLastError() != ERROR_SHARING_VIOLATION) {
/* Protocol violation: we explicitly clear errno, instead of /* Protocol violation: we explicitly clear errno, instead of
setting it to a POSIX error. Callers should use GetLastError. */ setting it to a POSIX error. Callers should use GetLastError. */
@ -1122,8 +1067,7 @@ win32_wstat(const wchar_t* path, struct win32_stat *result)
int code; int code;
const wchar_t *dot; const wchar_t *dot;
WIN32_FILE_ATTRIBUTE_DATA info; WIN32_FILE_ATTRIBUTE_DATA info;
/* XXX not supported on Win95 and NT 3.x */ if (!GetFileAttributesExW(path, GetFileExInfoStandard, &info)) {
if (!Py_GetFileAttributesExW(path, GetFileExInfoStandard, &info)) {
if (GetLastError() != ERROR_SHARING_VIOLATION) { if (GetLastError() != ERROR_SHARING_VIOLATION) {
/* Protocol violation: we explicitly clear errno, instead of /* Protocol violation: we explicitly clear errno, instead of
setting it to a POSIX error. Callers should use GetLastError. */ setting it to a POSIX error. Callers should use GetLastError. */