From 7870bdff5a16c7440a6db5ef5f91082d27a4c482 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Mon, 23 May 2011 18:12:52 +0200 Subject: [PATCH] Issue #6501: os.device_encoding() returns None on Windows if the application has no console. --- Misc/NEWS | 3 +++ Modules/posixmodule.c | 23 +++++++++++++---------- 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/Misc/NEWS b/Misc/NEWS index 6ebb33a8f99..9e2c14df2a7 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -153,6 +153,9 @@ Core and Builtins Library ------- +- Issue #6501: os.device_encoding() returns None on Windows if the application + has no console. + - Issue #12132: Skip test_build_ext in case the xxmodule is not found. - Issue #12105: Add O_CLOEXEC to the os module. diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index 9c19ed0433a..add3b35c9fc 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -8495,6 +8495,9 @@ static PyObject * device_encoding(PyObject *self, PyObject *args) { int fd; +#if defined(MS_WINDOWS) || defined(MS_WIN64) + UINT cp; +#endif if (!PyArg_ParseTuple(args, "i:device_encoding", &fd)) return NULL; if (!_PyVerify_fd(fd) || !isatty(fd)) { @@ -8502,16 +8505,16 @@ device_encoding(PyObject *self, PyObject *args) return Py_None; } #if defined(MS_WINDOWS) || defined(MS_WIN64) - if (fd == 0) { - char buf[100]; - sprintf(buf, "cp%d", GetConsoleCP()); - return PyUnicode_FromString(buf); - } - if (fd == 1 || fd == 2) { - char buf[100]; - sprintf(buf, "cp%d", GetConsoleOutputCP()); - return PyUnicode_FromString(buf); - } + if (fd == 0) + cp = GetConsoleCP(); + else if (fd == 1 || fd == 2) + cp = GetConsoleOutputCP(); + else + cp = 0; + /* GetConsoleCP() and GetConsoleOutputCP() return 0 if the application + has no console */ + if (cp != 0) + return PyUnicode_FromFormat("cp%u", (unsigned int)cp); #elif defined(CODESET) { char *codeset = nl_langinfo(CODESET);