mirror of
https://github.com/python/cpython.git
synced 2025-09-26 10:19:53 +00:00
Enable new I/O. Disable creation of old files.
Lots of stuff fails now, including -S and -m command line flags.
This commit is contained in:
parent
fa0054aa73
commit
6f376c4031
4 changed files with 11 additions and 73 deletions
|
@ -403,19 +403,13 @@ def execsitecustomize():
|
||||||
|
|
||||||
|
|
||||||
def installnewio():
|
def installnewio():
|
||||||
"""Install new I/O library as default.
|
"""Install new I/O library as default."""
|
||||||
|
|
||||||
This is only done if $PYTHONNEWIO is set and non-empty.
|
|
||||||
"""
|
|
||||||
if not os.getenv("PYTHONNEWIO"):
|
|
||||||
return
|
|
||||||
import io
|
import io
|
||||||
# Trick so that open won't become a bound method when stored
|
# Trick so that open won't become a bound method when stored
|
||||||
# as a class variable (as dumbdbm does)
|
# as a class variable (as dumbdbm does)
|
||||||
class open:
|
class open:
|
||||||
def __new__(cls, *args, **kwds):
|
def __new__(cls, *args, **kwds):
|
||||||
return io.open(*args, **kwds)
|
return io.open(*args, **kwds)
|
||||||
__builtin__.classic_open = __builtin__.open
|
|
||||||
__builtin__.open = open
|
__builtin__.open = open
|
||||||
sys.stdin = io.open(0, "r")
|
sys.stdin = io.open(0, "r")
|
||||||
sys.stdout = io.open(1, "w")
|
sys.stdout = io.open(1, "w")
|
||||||
|
|
|
@ -265,6 +265,10 @@ cleanup:
|
||||||
PyObject *
|
PyObject *
|
||||||
PyFile_FromFile(FILE *fp, char *name, char *mode, int (*close)(FILE *))
|
PyFile_FromFile(FILE *fp, char *name, char *mode, int (*close)(FILE *))
|
||||||
{
|
{
|
||||||
|
PyErr_SetString(PyExc_SystemError,
|
||||||
|
"attempt to create old file from FILE *");
|
||||||
|
return NULL;
|
||||||
|
#if 0
|
||||||
PyFileObject *f = (PyFileObject *)PyFile_Type.tp_new(&PyFile_Type,
|
PyFileObject *f = (PyFileObject *)PyFile_Type.tp_new(&PyFile_Type,
|
||||||
NULL, NULL);
|
NULL, NULL);
|
||||||
if (f != NULL) {
|
if (f != NULL) {
|
||||||
|
@ -278,6 +282,7 @@ PyFile_FromFile(FILE *fp, char *name, char *mode, int (*close)(FILE *))
|
||||||
Py_DECREF(o_name);
|
Py_DECREF(o_name);
|
||||||
}
|
}
|
||||||
return (PyObject *) f;
|
return (PyObject *) f;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
PyObject *
|
PyObject *
|
||||||
|
@ -1941,6 +1946,9 @@ file_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
|
||||||
PyObject *self;
|
PyObject *self;
|
||||||
static PyObject *not_yet_string;
|
static PyObject *not_yet_string;
|
||||||
|
|
||||||
|
PyErr_SetString(PyExc_SystemError, "attempt to create old file");
|
||||||
|
return NULL;
|
||||||
|
|
||||||
assert(type != NULL && type->tp_alloc != NULL);
|
assert(type != NULL && type->tp_alloc != NULL);
|
||||||
|
|
||||||
if (not_yet_string == NULL) {
|
if (not_yet_string == NULL) {
|
||||||
|
|
|
@ -1433,18 +1433,6 @@ PyDoc_STRVAR(oct_doc,
|
||||||
Return the octal representation of an integer or long integer.");
|
Return the octal representation of an integer or long integer.");
|
||||||
|
|
||||||
|
|
||||||
static PyObject *
|
|
||||||
builtin_open(PyObject *self, PyObject *args, PyObject *kwds)
|
|
||||||
{
|
|
||||||
return PyObject_Call((PyObject*)&PyFile_Type, args, kwds);
|
|
||||||
}
|
|
||||||
|
|
||||||
PyDoc_STRVAR(open_doc,
|
|
||||||
"open(name[, mode[, buffering]]) -> file object\n\
|
|
||||||
\n\
|
|
||||||
Open a file using the file() type, returns a file object.");
|
|
||||||
|
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
builtin_ord(PyObject *self, PyObject* obj)
|
builtin_ord(PyObject *self, PyObject* obj)
|
||||||
{
|
{
|
||||||
|
@ -1464,7 +1452,7 @@ builtin_ord(PyObject *self, PyObject* obj)
|
||||||
ord = (long)*PyUnicode_AS_UNICODE(obj);
|
ord = (long)*PyUnicode_AS_UNICODE(obj);
|
||||||
return PyInt_FromLong(ord);
|
return PyInt_FromLong(ord);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (PyBytes_Check(obj)) {
|
else if (PyBytes_Check(obj)) {
|
||||||
/* XXX Hopefully this is temporary */
|
/* XXX Hopefully this is temporary */
|
||||||
size = PyBytes_GET_SIZE(obj);
|
size = PyBytes_GET_SIZE(obj);
|
||||||
|
@ -1963,7 +1951,6 @@ static PyMethodDef builtin_methods[] = {
|
||||||
{"min", (PyCFunction)builtin_min, METH_VARARGS | METH_KEYWORDS, min_doc},
|
{"min", (PyCFunction)builtin_min, METH_VARARGS | METH_KEYWORDS, min_doc},
|
||||||
{"next", (PyCFunction)builtin_next, METH_VARARGS, next_doc},
|
{"next", (PyCFunction)builtin_next, METH_VARARGS, next_doc},
|
||||||
{"oct", builtin_oct, METH_O, oct_doc},
|
{"oct", builtin_oct, METH_O, oct_doc},
|
||||||
{"open", (PyCFunction)builtin_open, METH_VARARGS | METH_KEYWORDS, open_doc},
|
|
||||||
{"ord", builtin_ord, METH_O, ord_doc},
|
{"ord", builtin_ord, METH_O, ord_doc},
|
||||||
{"pow", builtin_pow, METH_VARARGS, pow_doc},
|
{"pow", builtin_pow, METH_VARARGS, pow_doc},
|
||||||
{"print", (PyCFunction)builtin_print, METH_VARARGS | METH_KEYWORDS, print_doc},
|
{"print", (PyCFunction)builtin_print, METH_VARARGS | METH_KEYWORDS, print_doc},
|
||||||
|
|
|
@ -960,13 +960,6 @@ settrace() -- set the global debug tracing function\n\
|
||||||
)
|
)
|
||||||
/* end of sys_doc */ ;
|
/* end of sys_doc */ ;
|
||||||
|
|
||||||
static int
|
|
||||||
_check_and_flush (FILE *stream)
|
|
||||||
{
|
|
||||||
int prev_fail = ferror (stream);
|
|
||||||
return fflush (stream) || prev_fail ? EOF : 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Subversion branch and revision management */
|
/* Subversion branch and revision management */
|
||||||
static const char _patchlevel_revision[] = PY_PATCHLEVEL_REVISION;
|
static const char _patchlevel_revision[] = PY_PATCHLEVEL_REVISION;
|
||||||
static const char headurl[] = "$HeadURL$";
|
static const char headurl[] = "$HeadURL$";
|
||||||
|
@ -1058,11 +1051,7 @@ PyObject *
|
||||||
_PySys_Init(void)
|
_PySys_Init(void)
|
||||||
{
|
{
|
||||||
PyObject *m, *v, *sysdict;
|
PyObject *m, *v, *sysdict;
|
||||||
PyObject *sysin, *sysout, *syserr;
|
|
||||||
char *s;
|
char *s;
|
||||||
#ifdef MS_WINDOWS
|
|
||||||
char buf[128];
|
|
||||||
#endif
|
|
||||||
|
|
||||||
m = Py_InitModule3("sys", sys_methods, sys_doc);
|
m = Py_InitModule3("sys", sys_methods, sys_doc);
|
||||||
if (m == NULL)
|
if (m == NULL)
|
||||||
|
@ -1081,52 +1070,12 @@ _PySys_Init(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Closing the standard FILE* if sys.std* goes aways causes problems
|
/* stdin/stdout/stderr are now set by site.py. */
|
||||||
* for embedded Python usages. Closing them when somebody explicitly
|
|
||||||
* invokes .close() might be possible, but the FAQ promises they get
|
|
||||||
* never closed. However, we still need to get write errors when
|
|
||||||
* writing fails (e.g. because stdout is redirected), so we flush the
|
|
||||||
* streams and check for errors before the file objects are deleted.
|
|
||||||
* On OS X, fflush()ing stdin causes an error, so we exempt stdin
|
|
||||||
* from that procedure.
|
|
||||||
*/
|
|
||||||
sysin = PyFile_FromFile(stdin, "<stdin>", "r", NULL);
|
|
||||||
sysout = PyFile_FromFile(stdout, "<stdout>", "w", _check_and_flush);
|
|
||||||
syserr = PyFile_FromFile(stderr, "<stderr>", "w", _check_and_flush);
|
|
||||||
if (PyErr_Occurred())
|
|
||||||
return NULL;
|
|
||||||
#ifdef MS_WINDOWS
|
|
||||||
if(isatty(_fileno(stdin)) && PyFile_Check(sysin)) {
|
|
||||||
sprintf(buf, "cp%d", GetConsoleCP());
|
|
||||||
if (!PyFile_SetEncoding(sysin, buf))
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
if(isatty(_fileno(stdout)) && PyFile_Check(sysout)) {
|
|
||||||
sprintf(buf, "cp%d", GetConsoleOutputCP());
|
|
||||||
if (!PyFile_SetEncoding(sysout, buf))
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
if(isatty(_fileno(stderr)) && PyFile_Check(syserr)) {
|
|
||||||
sprintf(buf, "cp%d", GetConsoleOutputCP());
|
|
||||||
if (!PyFile_SetEncoding(syserr, buf))
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
PyDict_SetItemString(sysdict, "stdin", sysin);
|
|
||||||
PyDict_SetItemString(sysdict, "stdout", sysout);
|
|
||||||
PyDict_SetItemString(sysdict, "stderr", syserr);
|
|
||||||
/* Make backup copies for cleanup */
|
|
||||||
PyDict_SetItemString(sysdict, "__stdin__", sysin);
|
|
||||||
PyDict_SetItemString(sysdict, "__stdout__", sysout);
|
|
||||||
PyDict_SetItemString(sysdict, "__stderr__", syserr);
|
|
||||||
PyDict_SetItemString(sysdict, "__displayhook__",
|
PyDict_SetItemString(sysdict, "__displayhook__",
|
||||||
PyDict_GetItemString(sysdict, "displayhook"));
|
PyDict_GetItemString(sysdict, "displayhook"));
|
||||||
PyDict_SetItemString(sysdict, "__excepthook__",
|
PyDict_SetItemString(sysdict, "__excepthook__",
|
||||||
PyDict_GetItemString(sysdict, "excepthook"));
|
PyDict_GetItemString(sysdict, "excepthook"));
|
||||||
Py_XDECREF(sysin);
|
|
||||||
Py_XDECREF(sysout);
|
|
||||||
Py_XDECREF(syserr);
|
|
||||||
PyDict_SetItemString(sysdict, "version",
|
PyDict_SetItemString(sysdict, "version",
|
||||||
v = PyString_FromString(Py_GetVersion()));
|
v = PyString_FromString(Py_GetVersion()));
|
||||||
Py_XDECREF(v);
|
Py_XDECREF(v);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue