@@ -64,6 +64,7 @@ extern grammar _PyParser_Grammar; /* From graminit.c */
64
64
/* Forward declarations */
65
65
static PyStatus add_main_module (PyInterpreterState * interp );
66
66
static PyStatus init_import_site (void );
67
+ static PyStatus init_set_builtins_open (PyThreadState * tstate );
67
68
static PyStatus init_sys_streams (PyThreadState * tstate );
68
69
static PyStatus init_signals (PyThreadState * tstate );
69
70
static void call_py_exitfuncs (PyThreadState * tstate );
@@ -994,6 +995,11 @@ pyinit_main(PyThreadState *tstate)
994
995
return status ;
995
996
}
996
997
998
+ status = init_set_builtins_open (tstate );
999
+ if (_PyStatus_EXCEPTION (status )) {
1000
+ return status ;
1001
+ }
1002
+
997
1003
/* Initialize warnings. */
998
1004
PyObject * warnoptions = PySys_GetObject ("warnoptions" );
999
1005
if (warnoptions != NULL && PyList_Size (warnoptions ) > 0 )
@@ -1569,6 +1575,11 @@ new_interpreter(PyThreadState **tstate_p)
1569
1575
return status ;
1570
1576
}
1571
1577
1578
+ status = init_set_builtins_open (tstate );
1579
+ if (_PyStatus_EXCEPTION (status )) {
1580
+ return status ;
1581
+ }
1582
+
1572
1583
status = add_main_module (interp );
1573
1584
if (_PyStatus_EXCEPTION (status )) {
1574
1585
return status ;
@@ -1891,12 +1902,49 @@ create_stdio(const PyConfig *config, PyObject* io,
1891
1902
return NULL ;
1892
1903
}
1893
1904
1894
- /* Initialize sys.stdin, stdout, stderr and builtins.open */
1905
+ /* Set builtins.open to io.OpenWrapper */
1895
1906
static PyStatus
1896
- init_sys_streams (PyThreadState * tstate )
1907
+ init_set_builtins_open (PyThreadState * tstate )
1897
1908
{
1898
1909
PyObject * iomod = NULL , * wrapper ;
1899
1910
PyObject * bimod = NULL ;
1911
+ PyStatus res = _PyStatus_OK ();
1912
+
1913
+ if (!(iomod = PyImport_ImportModule ("io" ))) {
1914
+ goto error ;
1915
+ }
1916
+
1917
+ if (!(bimod = PyImport_ImportModule ("builtins" ))) {
1918
+ goto error ;
1919
+ }
1920
+
1921
+ if (!(wrapper = PyObject_GetAttrString (iomod , "OpenWrapper" ))) {
1922
+ goto error ;
1923
+ }
1924
+
1925
+ /* Set builtins.open */
1926
+ if (PyObject_SetAttrString (bimod , "open" , wrapper ) == -1 ) {
1927
+ Py_DECREF (wrapper );
1928
+ goto error ;
1929
+ }
1930
+ Py_DECREF (wrapper );
1931
+ goto done ;
1932
+
1933
+ error :
1934
+ res = _PyStatus_ERR ("can't initialize io.open" );
1935
+
1936
+ done :
1937
+ Py_XDECREF (bimod );
1938
+ Py_XDECREF (iomod );
1939
+ return res ;
1940
+ }
1941
+
1942
+
1943
+ /* Initialize sys.stdin, stdout, stderr and builtins.open */
1944
+ static PyStatus
1945
+ init_sys_streams (PyThreadState * tstate )
1946
+ {
1947
+ PyObject * iomod = NULL ;
1900
1948
PyObject * m ;
1901
1949
PyObject * std = NULL ;
1902
1950
int fd ;
@@ -1929,23 +1977,9 @@ init_sys_streams(PyThreadState *tstate)
1929
1977
}
1930
1978
Py_DECREF (m );
1931
1979
1932
- if (!(bimod = PyImport_ImportModule ("builtins" ))) {
1933
- goto error ;
1934
- }
1935
-
1936
1980
if (!(iomod = PyImport_ImportModule ("io" ))) {
1937
1981
goto error ;
1938
1982
}
1939
- if (!(wrapper = PyObject_GetAttrString (iomod , "OpenWrapper" ))) {
1940
- goto error ;
1941
- }
1942
-
1943
- /* Set builtins.open */
1944
- if (PyObject_SetAttrString (bimod , "open" , wrapper ) == -1 ) {
1945
- Py_DECREF (wrapper );
1946
- goto error ;
1947
- }
1948
- Py_DECREF (wrapper );
1949
1983
1950
1984
/* Set sys.stdin */
1951
1985
fd = fileno (stdin );
@@ -2013,8 +2047,6 @@ init_sys_streams(PyThreadState *tstate)
2013
2047
2014
2048
done :
2015
2049
_Py_ClearStandardStreamEncoding ();
2016
-
2017
- Py_XDECREF (bimod );
2018
2050
Py_XDECREF (iomod );
2019
2051
return res ;
2020
2052
}
0 commit comments