summaryrefslogtreecommitdiffstats
path: root/Modules/_cursesmodule.c
diff options
context:
space:
mode:
authorDavide Rizzo <sorcio@gmail.com>2024-05-04 21:41:47 (GMT)
committerGitHub <noreply@github.com>2024-05-04 21:41:47 (GMT)
commit08d169f14a715ceaae3d563ced2ff1633d009359 (patch)
tree2d7f24665ab85a8ae014d52573ce4b3d09a95fc3 /Modules/_cursesmodule.c
parent291cfa454b9c5b677c955aaf53fab91f0186b6fa (diff)
downloadcpython-08d169f14a715ceaae3d563ced2ff1633d009359.zip
cpython-08d169f14a715ceaae3d563ced2ff1633d009359.tar.gz
cpython-08d169f14a715ceaae3d563ced2ff1633d009359.tar.bz2
gh-109617: fix ncurses incompatibility on macOS with Xcode 15 (#111258)
Co-authored-by: Hugo van Kemenade <1324225+hugovk@users.noreply.github.com> Co-authored-by: Ɓukasz Langa <lukasz@langa.pl>
Diffstat (limited to 'Modules/_cursesmodule.c')
-rw-r--r--Modules/_cursesmodule.c17
1 files changed, 13 insertions, 4 deletions
diff --git a/Modules/_cursesmodule.c b/Modules/_cursesmodule.c
index 8bf6824..69b9704 100644
--- a/Modules/_cursesmodule.c
+++ b/Modules/_cursesmodule.c
@@ -1156,8 +1156,10 @@ int py_mvwdelch(WINDOW *w, int y, int x)
#endif
#if defined(HAVE_CURSES_IS_PAD)
+// is_pad() is defined, either as a macro or as a function
#define py_is_pad(win) is_pad(win)
#elif defined(WINDOW_HAS_FLAGS)
+// is_pad() is not defined, but we can inspect WINDOW structure members
#define py_is_pad(win) ((win) ? ((win)->_flags & _ISPAD) != 0 : FALSE)
#endif
@@ -4586,7 +4588,14 @@ make_ncurses_version(PyTypeObject *type)
if (ncurses_version == NULL) {
return NULL;
}
-
+ const char *str = curses_version();
+ unsigned long major = 0, minor = 0, patch = 0;
+ if (!str || sscanf(str, "%*[^0-9]%lu.%lu.%lu", &major, &minor, &patch) < 3) {
+ // Fallback to header version, which cannot be that wrong
+ major = NCURSES_VERSION_MAJOR;
+ minor = NCURSES_VERSION_MINOR;
+ patch = NCURSES_VERSION_PATCH;
+ }
#define SetIntItem(flag) \
PyStructSequence_SET_ITEM(ncurses_version, pos++, PyLong_FromLong(flag)); \
if (PyErr_Occurred()) { \
@@ -4594,9 +4603,9 @@ make_ncurses_version(PyTypeObject *type)
return NULL; \
}
- SetIntItem(NCURSES_VERSION_MAJOR)
- SetIntItem(NCURSES_VERSION_MINOR)
- SetIntItem(NCURSES_VERSION_PATCH)
+ SetIntItem(major)
+ SetIntItem(minor)
+ SetIntItem(patch)
#undef SetIntItem
return ncurses_version;