mirror of https://github.com/python/cpython.git
Use Unicode unconditionally for _winapi.CreateFile (GH-114611)
Currently it switches based on build settings, but argument clinic does not handle it correctly.
This commit is contained in:
parent
c09eae3e38
commit
d7cbb04acb
|
@ -451,7 +451,7 @@ _winapi_ConnectNamedPipe_impl(PyObject *module, HANDLE handle,
|
||||||
/*[clinic input]
|
/*[clinic input]
|
||||||
_winapi.CreateFile -> HANDLE
|
_winapi.CreateFile -> HANDLE
|
||||||
|
|
||||||
file_name: LPCTSTR
|
file_name: LPCWSTR
|
||||||
desired_access: DWORD
|
desired_access: DWORD
|
||||||
share_mode: DWORD
|
share_mode: DWORD
|
||||||
security_attributes: LPSECURITY_ATTRIBUTES
|
security_attributes: LPSECURITY_ATTRIBUTES
|
||||||
|
@ -462,12 +462,12 @@ _winapi.CreateFile -> HANDLE
|
||||||
[clinic start generated code]*/
|
[clinic start generated code]*/
|
||||||
|
|
||||||
static HANDLE
|
static HANDLE
|
||||||
_winapi_CreateFile_impl(PyObject *module, LPCTSTR file_name,
|
_winapi_CreateFile_impl(PyObject *module, LPCWSTR file_name,
|
||||||
DWORD desired_access, DWORD share_mode,
|
DWORD desired_access, DWORD share_mode,
|
||||||
LPSECURITY_ATTRIBUTES security_attributes,
|
LPSECURITY_ATTRIBUTES security_attributes,
|
||||||
DWORD creation_disposition,
|
DWORD creation_disposition,
|
||||||
DWORD flags_and_attributes, HANDLE template_file)
|
DWORD flags_and_attributes, HANDLE template_file)
|
||||||
/*[clinic end generated code: output=417ddcebfc5a3d53 input=6423c3e40372dbd5]*/
|
/*[clinic end generated code: output=818c811e5e04d550 input=1fa870ed1c2e3d69]*/
|
||||||
{
|
{
|
||||||
HANDLE handle;
|
HANDLE handle;
|
||||||
|
|
||||||
|
@ -478,14 +478,15 @@ _winapi_CreateFile_impl(PyObject *module, LPCTSTR file_name,
|
||||||
}
|
}
|
||||||
|
|
||||||
Py_BEGIN_ALLOW_THREADS
|
Py_BEGIN_ALLOW_THREADS
|
||||||
handle = CreateFile(file_name, desired_access,
|
handle = CreateFileW(file_name, desired_access,
|
||||||
share_mode, security_attributes,
|
share_mode, security_attributes,
|
||||||
creation_disposition,
|
creation_disposition,
|
||||||
flags_and_attributes, template_file);
|
flags_and_attributes, template_file);
|
||||||
Py_END_ALLOW_THREADS
|
Py_END_ALLOW_THREADS
|
||||||
|
|
||||||
if (handle == INVALID_HANDLE_VALUE)
|
if (handle == INVALID_HANDLE_VALUE) {
|
||||||
PyErr_SetFromWindowsErr(0);
|
PyErr_SetFromWindowsErr(0);
|
||||||
|
}
|
||||||
|
|
||||||
return handle;
|
return handle;
|
||||||
}
|
}
|
||||||
|
|
|
@ -132,7 +132,7 @@ PyDoc_STRVAR(_winapi_CreateFile__doc__,
|
||||||
{"CreateFile", _PyCFunction_CAST(_winapi_CreateFile), METH_FASTCALL, _winapi_CreateFile__doc__},
|
{"CreateFile", _PyCFunction_CAST(_winapi_CreateFile), METH_FASTCALL, _winapi_CreateFile__doc__},
|
||||||
|
|
||||||
static HANDLE
|
static HANDLE
|
||||||
_winapi_CreateFile_impl(PyObject *module, LPCTSTR file_name,
|
_winapi_CreateFile_impl(PyObject *module, LPCWSTR file_name,
|
||||||
DWORD desired_access, DWORD share_mode,
|
DWORD desired_access, DWORD share_mode,
|
||||||
LPSECURITY_ATTRIBUTES security_attributes,
|
LPSECURITY_ATTRIBUTES security_attributes,
|
||||||
DWORD creation_disposition,
|
DWORD creation_disposition,
|
||||||
|
@ -142,7 +142,7 @@ static PyObject *
|
||||||
_winapi_CreateFile(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
|
_winapi_CreateFile(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
|
||||||
{
|
{
|
||||||
PyObject *return_value = NULL;
|
PyObject *return_value = NULL;
|
||||||
LPCTSTR file_name;
|
LPCWSTR file_name = NULL;
|
||||||
DWORD desired_access;
|
DWORD desired_access;
|
||||||
DWORD share_mode;
|
DWORD share_mode;
|
||||||
LPSECURITY_ATTRIBUTES security_attributes;
|
LPSECURITY_ATTRIBUTES security_attributes;
|
||||||
|
@ -151,8 +151,8 @@ _winapi_CreateFile(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
|
||||||
HANDLE template_file;
|
HANDLE template_file;
|
||||||
HANDLE _return_value;
|
HANDLE _return_value;
|
||||||
|
|
||||||
if (!_PyArg_ParseStack(args, nargs, "skk" F_POINTER "kk" F_HANDLE ":CreateFile",
|
if (!_PyArg_ParseStack(args, nargs, "O&kk" F_POINTER "kk" F_HANDLE ":CreateFile",
|
||||||
&file_name, &desired_access, &share_mode, &security_attributes, &creation_disposition, &flags_and_attributes, &template_file)) {
|
_PyUnicode_WideCharString_Converter, &file_name, &desired_access, &share_mode, &security_attributes, &creation_disposition, &flags_and_attributes, &template_file)) {
|
||||||
goto exit;
|
goto exit;
|
||||||
}
|
}
|
||||||
_return_value = _winapi_CreateFile_impl(module, file_name, desired_access, share_mode, security_attributes, creation_disposition, flags_and_attributes, template_file);
|
_return_value = _winapi_CreateFile_impl(module, file_name, desired_access, share_mode, security_attributes, creation_disposition, flags_and_attributes, template_file);
|
||||||
|
@ -165,6 +165,11 @@ _winapi_CreateFile(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
|
||||||
return_value = HANDLE_TO_PYNUM(_return_value);
|
return_value = HANDLE_TO_PYNUM(_return_value);
|
||||||
|
|
||||||
exit:
|
exit:
|
||||||
|
/* Cleanup for file_name */
|
||||||
|
#if !USE_UNICODE_WCHAR_CACHE
|
||||||
|
PyMem_Free((void *)file_name);
|
||||||
|
#endif /* USE_UNICODE_WCHAR_CACHE */
|
||||||
|
|
||||||
return return_value;
|
return return_value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1242,4 +1247,4 @@ _winapi__mimetypes_read_windows_registry(PyObject *module, PyObject *const *args
|
||||||
exit:
|
exit:
|
||||||
return return_value;
|
return return_value;
|
||||||
}
|
}
|
||||||
/*[clinic end generated code: output=9c08a7371fcf5dd4 input=a9049054013a1b77]*/
|
/*[clinic end generated code: output=6b1ee5351cdc5386 input=a9049054013a1b77]*/
|
||||||
|
|
Loading…
Reference in New Issue