]> granicus.if.org Git - python/commitdiff
Close #14223: Fix window.addch(curses.ACS_HLINE)
authorVictor Stinner <victor.stinner@gmail.com>
Sat, 1 Sep 2012 13:00:34 +0000 (15:00 +0200)
committerVictor Stinner <victor.stinner@gmail.com>
Sat, 1 Sep 2012 13:00:34 +0000 (15:00 +0200)
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.

Misc/NEWS
Modules/_cursesmodule.c

index ccf60c26eb2ed12e4e521d6acbf3c4489bdd3d79..3d55f54a40a1f5679914c1ff0177d9e331f13ad0 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -28,6 +28,13 @@ Library
   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?
 ===============================================
index 0436e7fec8ee6babcd5cb08452e907e4adda078e..3f9ca1313dac1aa46f100f0114e5e793ba3167ab 100644 (file)
@@ -280,7 +280,6 @@ PyCurses_ConvertToCchar_t(PyCursesWindowObject *win, PyObject *obj,
 #endif
                           )
 {
-    int ret = 0;
     long value;
 #ifdef HAVE_NCURSESW
     wchar_t buffer[2];
@@ -304,7 +303,6 @@ PyCurses_ConvertToCchar_t(PyCursesWindowObject *win, PyObject *obj,
     }
     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 @@ PyCurses_ConvertToCchar_t(PyCursesWindowObject *win, PyObject *obj,
                             "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 @@ PyCurses_ConvertToCchar_t(PyCursesWindowObject *win, PyObject *obj,
                      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;
-        }
-    }
-    else
-#endif
-    {
-        *ch = (chtype)value;
-        if ((long)*ch != value) {
-            PyErr_Format(PyExc_OverflowError,
-                         "byte doesn't fit in chtype");
-            return 0;
-        }
+
+    *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