diff options
| author | Albrecht Schlosser <albrechts.fltk@online.de> | 2024-03-18 22:29:50 +0100 |
|---|---|---|
| committer | Albrecht Schlosser <albrechts.fltk@online.de> | 2024-03-18 22:29:50 +0100 |
| commit | d3a3ab40b7cfe3aa5adbcbc7895ec48d39dc89c1 (patch) | |
| tree | ce7a1d5a13254ae4d2380f4d6f4149a3cd1bc453 /src/drivers | |
| parent | 1d43ae0b0a01fdd90486c616d5dddd318a8fb9f0 (diff) | |
Replace setenv() with putenv() on old systems (+937)
Add system check for setenv() function in configure and CMake.
Diffstat (limited to 'src/drivers')
| -rw-r--r-- | src/drivers/X11/Fl_X11_Screen_Driver.cxx | 23 |
1 files changed, 20 insertions, 3 deletions
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) { |
