Issue #9632: Remove sys.setfilesystemencoding() function: use PYTHONFSENCODING

environment variable to set the filesystem encoding at Python startup.
sys.setfilesystemencoding() creates inconsistencies because it is unable to
reencode all filenames in all objects.
This commit is contained in:
Victor Stinner 2010-09-10 21:57:59 +00:00
parent 6246d6dcb0
commit 5b519e0201
6 changed files with 5 additions and 65 deletions

View file

@ -724,15 +724,6 @@ always available.
:file:`/usr/include/dlfcn.h` using the :program:`h2py` script. Availability:
Unix.
.. function:: setfilesystemencoding(enc)
Set the encoding used when converting Python strings to file names to *enc*.
By default, Python tries to determine the encoding it should use automatically
on Unix; on Windows, it avoids such conversion completely. This function can
be used when Python's determination of the encoding needs to be overwritten,
e.g. when not all file names on disk can be decoded using the encoding that
Python had chosen.
.. function:: setprofile(profilefunc)
.. index::

View file

@ -21,7 +21,6 @@ PyAPI_FUNC(char *) Py_UniversalNewlineFgets(char *, int, FILE*, PyObject *);
*/
PyAPI_DATA(const char *) Py_FileSystemDefaultEncoding;
PyAPI_DATA(int) Py_HasFileSystemDefaultEncoding;
PyAPI_FUNC(int) _Py_SetFileSystemEncoding(PyObject *);
/* Internal API

View file

@ -630,17 +630,6 @@ class SysModuleTest(unittest.TestCase):
env['PYTHONFSENCODING'] = encoding
self.check_fsencoding(get_fsencoding(env), encoding)
def test_setfilesystemencoding(self):
old = sys.getfilesystemencoding()
try:
sys.setfilesystemencoding("iso-8859-1")
self.assertEqual(sys.getfilesystemencoding(), "iso-8859-1")
finally:
sys.setfilesystemencoding(old)
try:
self.assertRaises(LookupError, sys.setfilesystemencoding, "xxx")
finally:
sys.setfilesystemencoding(old)
class SizeofTest(unittest.TestCase):

View file

@ -29,6 +29,11 @@ Core and Builtins
Library
-------
- Issue #9632: Remove sys.setfilesystemencoding() function: use
PYTHONFSENCODING environment variable to set the filesystem encoding at
Python startup. sys.setfilesystemencoding() creates inconsistencies because
it is unable to reencode all filenames in all objects.
- Issue #9410: Various optimizations to the pickle module, leading to
speedups up to 4x (depending on the benchmark). Mostly ported from
Unladen Swallow; initial patch by Alexandre Vassalotti.

View file

@ -33,29 +33,6 @@ const char *Py_FileSystemDefaultEncoding = "utf-8";
int Py_HasFileSystemDefaultEncoding = 1;
#endif
int
_Py_SetFileSystemEncoding(PyObject *s)
{
PyObject *defenc, *codec;
if (!PyUnicode_Check(s)) {
PyErr_BadInternalCall();
return -1;
}
defenc = _PyUnicode_AsDefaultEncodedString(s, NULL);
if (!defenc)
return -1;
codec = _PyCodec_Lookup(PyBytes_AsString(defenc));
if (codec == NULL)
return -1;
Py_DECREF(codec);
if (!Py_HasFileSystemDefaultEncoding && Py_FileSystemDefaultEncoding)
/* A file system encoding was set at run-time */
free((char*)Py_FileSystemDefaultEncoding);
Py_FileSystemDefaultEncoding = strdup(PyBytes_AsString(defenc));
Py_HasFileSystemDefaultEncoding = 0;
return 0;
}
static PyObject *
builtin___build_class__(PyObject *self, PyObject *args, PyObject *kwds)
{

View file

@ -198,25 +198,6 @@ Return the encoding used to convert Unicode filenames in\n\
operating system filenames."
);
static PyObject *
sys_setfilesystemencoding(PyObject *self, PyObject *args)
{
PyObject *new_encoding;
if (!PyArg_ParseTuple(args, "U:setfilesystemencoding", &new_encoding))
return NULL;
if (_Py_SetFileSystemEncoding(new_encoding))
return NULL;
Py_INCREF(Py_None);
return Py_None;
}
PyDoc_STRVAR(setfilesystemencoding_doc,
"setfilesystemencoding(string) -> None\n\
\n\
Set the encoding used to convert Unicode filenames in\n\
operating system filenames."
);
static PyObject *
sys_intern(PyObject *self, PyObject *args)
{
@ -1012,8 +993,6 @@ static PyMethodDef sys_methods[] = {
#ifdef USE_MALLOPT
{"mdebug", sys_mdebug, METH_VARARGS},
#endif
{"setfilesystemencoding", sys_setfilesystemencoding, METH_VARARGS,
setfilesystemencoding_doc},
{"setcheckinterval", sys_setcheckinterval, METH_VARARGS,
setcheckinterval_doc},
{"getcheckinterval", sys_getcheckinterval, METH_NOARGS,