Skip to content

Commit cfe3e07

Browse files
authored
gh-153009: Fix compilation of curses on platforms that define the stdscr macro (#153010)
1 parent 5a400ce commit cfe3e07

3 files changed

Lines changed: 12 additions & 10 deletions

File tree

Include/py_curses.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ typedef struct {
9696
SCREEN *screen; /* NULL after the screen has been deleted */
9797
FILE *outfp; /* owned output stream, or NULL */
9898
FILE *infp; /* owned input stream, or NULL */
99-
PyObject *stdscr; /* the screen's standard window, or NULL */
99+
PyObject *stdscr_win; /* the screen's standard window, or NULL */
100100
} PyCursesScreenObject;
101101

102102
#define PyCurses_CAPSULE_NAME "_curses._C_API"
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
Fix compilation of :mod:`curses` on platforms that define the ``stdscr``
2+
macro. Patch by Bénédikt Tran.

Modules/_cursesmodule.c

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5125,7 +5125,7 @@ static PyType_Spec PyCursesWindow_Type_spec = {
51255125

51265126
static PyObject *
51275127
PyCursesScreen_New(cursesmodule_state *state, SCREEN *screen,
5128-
FILE *outfp, FILE *infp, PyObject *stdscr)
5128+
FILE *outfp, FILE *infp, PyObject *stdscr_win)
51295129
{
51305130
PyCursesScreenObject *so = PyObject_GC_New(PyCursesScreenObject,
51315131
state->screen_type);
@@ -5135,7 +5135,7 @@ PyCursesScreen_New(cursesmodule_state *state, SCREEN *screen,
51355135
so->screen = screen;
51365136
so->outfp = outfp;
51375137
so->infp = infp;
5138-
so->stdscr = Py_XNewRef(stdscr);
5138+
so->stdscr_win = Py_XNewRef(stdscr_win);
51395139
PyObject_GC_Track((PyObject *)so);
51405140
return (PyObject *)so;
51415141
}
@@ -5169,17 +5169,17 @@ static PyObject *
51695169
PyCursesScreen_get_stdscr(PyObject *self, void *Py_UNUSED(closure))
51705170
{
51715171
PyCursesScreenObject *so = _PyCursesScreenObject_CAST(self);
5172-
if (so->stdscr == NULL) {
5172+
if (so->stdscr_win == NULL) {
51735173
Py_RETURN_NONE;
51745174
}
5175-
return Py_NewRef(so->stdscr);
5175+
return Py_NewRef(so->stdscr_win);
51765176
}
51775177

51785178
static int
51795179
PyCursesScreen_traverse(PyObject *self, visitproc visit, void *arg)
51805180
{
51815181
Py_VISIT(Py_TYPE(self));
5182-
Py_VISIT(_PyCursesScreenObject_CAST(self)->stdscr);
5182+
Py_VISIT(_PyCursesScreenObject_CAST(self)->stdscr_win);
51835183
return 0;
51845184
}
51855185

@@ -5194,10 +5194,10 @@ PyCursesScreen_clear(PyObject *self)
51945194
detach it from its wrapper first: the wrapper must not delwin() a window
51955195
that delscreen() frees. Any further use of the wrapper operates on a
51965196
NULL window and fails cleanly. */
5197-
if (so->stdscr != NULL) {
5198-
((PyCursesWindowObject *)so->stdscr)->win = NULL;
5197+
if (so->stdscr_win != NULL) {
5198+
((PyCursesWindowObject *)so->stdscr_win)->win = NULL;
51995199
}
5200-
Py_CLEAR(so->stdscr);
5200+
Py_CLEAR(so->stdscr_win);
52015201
return 0;
52025202
}
52035203

@@ -6724,7 +6724,7 @@ _curses_newterm_impl(PyObject *module, const char *type, PyObject *fd,
67246724
Py_DECREF(screenobj);
67256725
return NULL;
67266726
}
6727-
((PyCursesScreenObject *)screenobj)->stdscr = Py_NewRef(win);
6727+
((PyCursesScreenObject *)screenobj)->stdscr_win = Py_NewRef(win);
67286728
Py_DECREF(win);
67296729
Py_XSETREF(state->topscreen, Py_NewRef(screenobj));
67306730
return screenobj;

0 commit comments

Comments
 (0)