[Python-checkins] cpython: Close #14223: Fix window.addch(curses.ACS_HLINE)

georg.brandl python-checkins at python.org
Sun Sep 9 11:19:09 CEST 2012


http://hg.python.org/cpython/rev/d6d632f254ee
changeset: 78904:d6d632f254ee
user: Victor Stinner <victor.stinner at gmail.com>
date: Sat Sep 01 15:00:34 2012 +0200
summary:
 Close #14223: Fix window.addch(curses.ACS_HLINE)
Fix window.addch() of the curses module for special characters like
curses.ACS_HLINE: the Python function addch(int) and addch(bytes) is now
calling the C function waddch()/mvwaddch() (as it was done in Python 3.2),
instead of wadd_wch()/mvwadd_wch(). The Python function addch(str) is still
calling the C function wadd_wch()/mvwadd_wch() if the Python curses is linked
to libncursesw.
files:
 Misc/NEWS | 7 +++++
 Modules/_cursesmodule.c | 34 +++++-----------------------
 2 files changed, 14 insertions(+), 27 deletions(-)
diff --git a/Misc/NEWS b/Misc/NEWS
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -28,6 +28,13 @@
 always returning an integer. So it is now possible to distinguish special
 keys like keypad keys.
 
+- Issue #14223: Fix window.addch() of the curses module for special characters
+ like curses.ACS_HLINE: the Python function addch(int) and addch(bytes) is now
+ calling the C function waddch()/mvwaddch() (as it was done in Python 3.2),
+ instead of wadd_wch()/mvwadd_wch(). The Python function addch(str) is still
+ calling the C function wadd_wch()/mvwadd_wch() if the Python curses is linked
+ to libncursesw.
+
 
 What's New in Python 3.3.0 Release Candidate 1?
 ===============================================
diff --git a/Modules/_cursesmodule.c b/Modules/_cursesmodule.c
--- a/Modules/_cursesmodule.c
+++ b/Modules/_cursesmodule.c
@@ -280,7 +280,6 @@
 #endif
 )
 {
- int ret = 0;
 long value;
 #ifdef HAVE_NCURSESW
 wchar_t buffer[2];
@@ -304,7 +303,6 @@
 }
 else if(PyBytes_Check(obj) && PyBytes_Size(obj) == 1) {
 value = (unsigned char)PyBytes_AsString(obj)[0];
- ret = 1;
 }
 else if (PyLong_CheckExact(obj)) {
 int overflow;
@@ -314,11 +312,6 @@
 "int doesn't fit in long");
 return 0;
 }
-#ifdef HAVE_NCURSESW
- ret = 2;
-#else
- ret = 1;
-#endif
 }
 else {
 PyErr_Format(PyExc_TypeError,
@@ -326,27 +319,14 @@
 Py_TYPE(obj)->tp_name);
 return 0;
 }
-#ifdef HAVE_NCURSESW
- if (ret == 2) {
- memset(wch->chars, 0, sizeof(wch->chars));
- wch->chars[0] = (wchar_t)value;
- if ((long)wch->chars[0] != value) {
- PyErr_Format(PyExc_OverflowError,
- "character doesn't fit in wchar_t");
- return 0;
- }
+
+ *ch = (chtype)value;
+ if ((long)*ch != value) {
+ PyErr_Format(PyExc_OverflowError,
+ "byte doesn't fit in chtype");
+ return 0;
 }
- else
-#endif
- {
- *ch = (chtype)value;
- if ((long)*ch != value) {
- PyErr_Format(PyExc_OverflowError,
- "byte doesn't fit in chtype");
- return 0;
- }
- }
- return ret;
+ return 1;
 }
 
 /* Convert an object to a byte string (char*) or a wide character string
-- 
Repository URL: http://hg.python.org/cpython


More information about the Python-checkins mailing list

AltStyle によって変換されたページ (->オリジナル) /