mirror of
https://github.com/python/cpython.git
synced 2025-07-23 11:15:24 +00:00
gh-101819: Remove _PyWindowsConsoleIO_Type from the Windows DLL (GH-101904)
Automerge-Triggered-By: GH:erlend-aasland
This commit is contained in:
parent
c7766245c1
commit
eb0c485b6c
8 changed files with 29 additions and 14 deletions
|
@ -577,6 +577,7 @@ _PyStaticObjects_CheckRefcnt(PyInterpreterState *interp) {
|
||||||
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(True));
|
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(True));
|
||||||
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(WarningMessage));
|
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(WarningMessage));
|
||||||
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(_));
|
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(_));
|
||||||
|
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(_WindowsConsoleIO));
|
||||||
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__IOBase_closed));
|
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__IOBase_closed));
|
||||||
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__abc_tpflags__));
|
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__abc_tpflags__));
|
||||||
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__abs__));
|
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__abs__));
|
||||||
|
@ -752,6 +753,7 @@ _PyStaticObjects_CheckRefcnt(PyInterpreterState *interp) {
|
||||||
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(_get_sourcefile));
|
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(_get_sourcefile));
|
||||||
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(_handle_fromlist));
|
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(_handle_fromlist));
|
||||||
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(_initializing));
|
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(_initializing));
|
||||||
|
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(_io));
|
||||||
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(_is_text_encoding));
|
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(_is_text_encoding));
|
||||||
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(_length_));
|
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(_length_));
|
||||||
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(_limbo));
|
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(_limbo));
|
||||||
|
|
|
@ -63,6 +63,7 @@ struct _Py_global_strings {
|
||||||
STRUCT_FOR_ID(True)
|
STRUCT_FOR_ID(True)
|
||||||
STRUCT_FOR_ID(WarningMessage)
|
STRUCT_FOR_ID(WarningMessage)
|
||||||
STRUCT_FOR_ID(_)
|
STRUCT_FOR_ID(_)
|
||||||
|
STRUCT_FOR_ID(_WindowsConsoleIO)
|
||||||
STRUCT_FOR_ID(__IOBase_closed)
|
STRUCT_FOR_ID(__IOBase_closed)
|
||||||
STRUCT_FOR_ID(__abc_tpflags__)
|
STRUCT_FOR_ID(__abc_tpflags__)
|
||||||
STRUCT_FOR_ID(__abs__)
|
STRUCT_FOR_ID(__abs__)
|
||||||
|
@ -238,6 +239,7 @@ struct _Py_global_strings {
|
||||||
STRUCT_FOR_ID(_get_sourcefile)
|
STRUCT_FOR_ID(_get_sourcefile)
|
||||||
STRUCT_FOR_ID(_handle_fromlist)
|
STRUCT_FOR_ID(_handle_fromlist)
|
||||||
STRUCT_FOR_ID(_initializing)
|
STRUCT_FOR_ID(_initializing)
|
||||||
|
STRUCT_FOR_ID(_io)
|
||||||
STRUCT_FOR_ID(_is_text_encoding)
|
STRUCT_FOR_ID(_is_text_encoding)
|
||||||
STRUCT_FOR_ID(_length_)
|
STRUCT_FOR_ID(_length_)
|
||||||
STRUCT_FOR_ID(_limbo)
|
STRUCT_FOR_ID(_limbo)
|
||||||
|
|
2
Include/internal/pycore_runtime_init_generated.h
generated
2
Include/internal/pycore_runtime_init_generated.h
generated
|
@ -569,6 +569,7 @@ extern "C" {
|
||||||
INIT_ID(True), \
|
INIT_ID(True), \
|
||||||
INIT_ID(WarningMessage), \
|
INIT_ID(WarningMessage), \
|
||||||
INIT_ID(_), \
|
INIT_ID(_), \
|
||||||
|
INIT_ID(_WindowsConsoleIO), \
|
||||||
INIT_ID(__IOBase_closed), \
|
INIT_ID(__IOBase_closed), \
|
||||||
INIT_ID(__abc_tpflags__), \
|
INIT_ID(__abc_tpflags__), \
|
||||||
INIT_ID(__abs__), \
|
INIT_ID(__abs__), \
|
||||||
|
@ -744,6 +745,7 @@ extern "C" {
|
||||||
INIT_ID(_get_sourcefile), \
|
INIT_ID(_get_sourcefile), \
|
||||||
INIT_ID(_handle_fromlist), \
|
INIT_ID(_handle_fromlist), \
|
||||||
INIT_ID(_initializing), \
|
INIT_ID(_initializing), \
|
||||||
|
INIT_ID(_io), \
|
||||||
INIT_ID(_is_text_encoding), \
|
INIT_ID(_is_text_encoding), \
|
||||||
INIT_ID(_length_), \
|
INIT_ID(_length_), \
|
||||||
INIT_ID(_limbo), \
|
INIT_ID(_limbo), \
|
||||||
|
|
|
@ -32,6 +32,8 @@ _PyUnicode_InitStaticStrings(void) {
|
||||||
PyUnicode_InternInPlace(&string);
|
PyUnicode_InternInPlace(&string);
|
||||||
string = &_Py_ID(_);
|
string = &_Py_ID(_);
|
||||||
PyUnicode_InternInPlace(&string);
|
PyUnicode_InternInPlace(&string);
|
||||||
|
string = &_Py_ID(_WindowsConsoleIO);
|
||||||
|
PyUnicode_InternInPlace(&string);
|
||||||
string = &_Py_ID(__IOBase_closed);
|
string = &_Py_ID(__IOBase_closed);
|
||||||
PyUnicode_InternInPlace(&string);
|
PyUnicode_InternInPlace(&string);
|
||||||
string = &_Py_ID(__abc_tpflags__);
|
string = &_Py_ID(__abc_tpflags__);
|
||||||
|
@ -382,6 +384,8 @@ _PyUnicode_InitStaticStrings(void) {
|
||||||
PyUnicode_InternInPlace(&string);
|
PyUnicode_InternInPlace(&string);
|
||||||
string = &_Py_ID(_initializing);
|
string = &_Py_ID(_initializing);
|
||||||
PyUnicode_InternInPlace(&string);
|
PyUnicode_InternInPlace(&string);
|
||||||
|
string = &_Py_ID(_io);
|
||||||
|
PyUnicode_InternInPlace(&string);
|
||||||
string = &_Py_ID(_is_text_encoding);
|
string = &_Py_ID(_is_text_encoding);
|
||||||
PyUnicode_InternInPlace(&string);
|
PyUnicode_InternInPlace(&string);
|
||||||
string = &_Py_ID(_length_);
|
string = &_Py_ID(_length_);
|
||||||
|
|
|
@ -21,13 +21,9 @@ extern PyTypeObject PyBufferedRandom_Type;
|
||||||
extern PyTypeObject PyTextIOWrapper_Type;
|
extern PyTypeObject PyTextIOWrapper_Type;
|
||||||
extern PyTypeObject PyIncrementalNewlineDecoder_Type;
|
extern PyTypeObject PyIncrementalNewlineDecoder_Type;
|
||||||
|
|
||||||
#ifndef Py_LIMITED_API
|
|
||||||
#ifdef MS_WINDOWS
|
#ifdef MS_WINDOWS
|
||||||
extern PyTypeObject PyWindowsConsoleIO_Type;
|
extern PyTypeObject PyWindowsConsoleIO_Type;
|
||||||
PyAPI_DATA(PyObject *) _PyWindowsConsoleIO_Type;
|
|
||||||
#define PyWindowsConsoleIO_Check(op) (PyObject_TypeCheck((op), (PyTypeObject*)_PyWindowsConsoleIO_Type))
|
|
||||||
#endif /* MS_WINDOWS */
|
#endif /* MS_WINDOWS */
|
||||||
#endif /* Py_LIMITED_API */
|
|
||||||
|
|
||||||
/* These functions are used as METH_NOARGS methods, are normally called
|
/* These functions are used as METH_NOARGS methods, are normally called
|
||||||
* with args=NULL, and return a new reference.
|
* with args=NULL, and return a new reference.
|
||||||
|
|
|
@ -260,7 +260,7 @@ _io__WindowsConsoleIO___init___impl(winconsoleio *self, PyObject *nameobj,
|
||||||
int fd_is_own = 0;
|
int fd_is_own = 0;
|
||||||
HANDLE handle = NULL;
|
HANDLE handle = NULL;
|
||||||
|
|
||||||
assert(PyWindowsConsoleIO_Check(self));
|
assert(PyObject_TypeCheck(self, (PyTypeObject *)&PyWindowsConsoleIO_Type));
|
||||||
if (self->fd >= 0) {
|
if (self->fd >= 0) {
|
||||||
if (self->closefd) {
|
if (self->closefd) {
|
||||||
/* Have to close the existing file first. */
|
/* Have to close the existing file first. */
|
||||||
|
@ -1174,6 +1174,4 @@ PyTypeObject PyWindowsConsoleIO_Type = {
|
||||||
0, /* tp_finalize */
|
0, /* tp_finalize */
|
||||||
};
|
};
|
||||||
|
|
||||||
PyObject * _PyWindowsConsoleIO_Type = (PyObject*)&PyWindowsConsoleIO_Type;
|
|
||||||
|
|
||||||
#endif /* MS_WINDOWS */
|
#endif /* MS_WINDOWS */
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
#ifdef MS_WINDOWS
|
#ifdef MS_WINDOWS
|
||||||
|
|
||||||
#include "pycore_fileutils.h" // _Py_get_osfhandle()
|
#include "pycore_fileutils.h" // _Py_get_osfhandle()
|
||||||
#include "..\modules\_io\_iomodule.h"
|
#include "pycore_runtime.h" // _Py_ID()
|
||||||
|
|
||||||
#define WIN32_LEAN_AND_MEAN
|
#define WIN32_LEAN_AND_MEAN
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
|
@ -51,7 +51,14 @@ _testconsole_write_input_impl(PyObject *module, PyObject *file,
|
||||||
{
|
{
|
||||||
INPUT_RECORD *rec = NULL;
|
INPUT_RECORD *rec = NULL;
|
||||||
|
|
||||||
if (!PyWindowsConsoleIO_Check(file)) {
|
PyTypeObject *winconsoleio_type = (PyTypeObject *)_PyImport_GetModuleAttr(
|
||||||
|
&_Py_ID(_io), &_Py_ID(_WindowsConsoleIO));
|
||||||
|
if (winconsoleio_type == NULL) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
int is_subclass = PyObject_TypeCheck(file, winconsoleio_type);
|
||||||
|
Py_DECREF(winconsoleio_type);
|
||||||
|
if (!is_subclass) {
|
||||||
PyErr_SetString(PyExc_TypeError, "expected raw console object");
|
PyErr_SetString(PyExc_TypeError, "expected raw console object");
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
|
@ -54,10 +54,6 @@ extern void _PyIO_Fini(void);
|
||||||
|
|
||||||
#ifdef MS_WINDOWS
|
#ifdef MS_WINDOWS
|
||||||
# undef BYTE
|
# undef BYTE
|
||||||
|
|
||||||
extern PyTypeObject PyWindowsConsoleIO_Type;
|
|
||||||
# define PyWindowsConsoleIO_Check(op) \
|
|
||||||
(PyObject_TypeCheck((op), &PyWindowsConsoleIO_Type))
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define PUTS(fd, str) _Py_write_noraise(fd, str, (int)strlen(str))
|
#define PUTS(fd, str) _Py_write_noraise(fd, str, (int)strlen(str))
|
||||||
|
@ -2358,8 +2354,16 @@ create_stdio(const PyConfig *config, PyObject* io,
|
||||||
|
|
||||||
#ifdef MS_WINDOWS
|
#ifdef MS_WINDOWS
|
||||||
/* Windows console IO is always UTF-8 encoded */
|
/* Windows console IO is always UTF-8 encoded */
|
||||||
if (PyWindowsConsoleIO_Check(raw))
|
PyTypeObject *winconsoleio_type = (PyTypeObject *)_PyImport_GetModuleAttr(
|
||||||
|
&_Py_ID(_io), &_Py_ID(_WindowsConsoleIO));
|
||||||
|
if (winconsoleio_type == NULL) {
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
int is_subclass = PyObject_TypeCheck(raw, winconsoleio_type);
|
||||||
|
Py_DECREF(winconsoleio_type);
|
||||||
|
if (is_subclass) {
|
||||||
encoding = L"utf-8";
|
encoding = L"utf-8";
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
text = PyUnicode_FromString(name);
|
text = PyUnicode_FromString(name);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue