From d3a3ab40b7cfe3aa5adbcbc7895ec48d39dc89c1 Mon Sep 17 00:00:00 2001 From: Albrecht Schlosser Date: Mon, 18 Mar 2024 22:29:50 +0100 Subject: Replace setenv() with putenv() on old systems (+937) Add system check for setenv() function in configure and CMake. --- src/drivers/X11/Fl_X11_Screen_Driver.cxx | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) (limited to 'src/drivers/X11/Fl_X11_Screen_Driver.cxx') diff --git a/src/drivers/X11/Fl_X11_Screen_Driver.cxx b/src/drivers/X11/Fl_X11_Screen_Driver.cxx index 79875366e..8dc79fc68 100644 --- a/src/drivers/X11/Fl_X11_Screen_Driver.cxx +++ b/src/drivers/X11/Fl_X11_Screen_Driver.cxx @@ -75,9 +75,26 @@ Fl_X11_Screen_Driver::Fl_X11_Screen_Driver() : Fl_Unix_Screen_Driver() { key_table_size = 0; } -void Fl_X11_Screen_Driver::display(const char *d) -{ - if (d) setenv("DISPLAY", d, 1); +void Fl_X11_Screen_Driver::display(const char *d) { + if (!d) return; + // Issue #937: + // setenv() is available since POSIX.1-2001 + // https://pubs.opengroup.org/onlinepubs/009604499/functions/setenv.html +#if HAVE_SETENV + setenv("DISPLAY", d, 1); +#else // HAVE_SETENV + // Use putenv() for old systems (similar to FLTK 1.3) + static char e[1024]; + strcpy(e, "DISPLAY="); + strlcat(e, d, sizeof(e)); + for (char *c = e + 8; *c != ':'; c++) { + if (!*c) { + strlcat(e,":0.0",sizeof(e)); + break; + } + } + putenv(e); +#endif // HAVE_SETENV } void fl_x11_use_display(Display *d) { -- cgit v1.2.3