summaryrefslogtreecommitdiff
path: root/src/drivers
diff options
context:
space:
mode:
authorAlbrecht Schlosser <albrechts.fltk@online.de>2024-03-18 22:29:50 +0100
committerAlbrecht Schlosser <albrechts.fltk@online.de>2024-03-18 22:29:50 +0100
commitd3a3ab40b7cfe3aa5adbcbc7895ec48d39dc89c1 (patch)
treece7a1d5a13254ae4d2380f4d6f4149a3cd1bc453 /src/drivers
parent1d43ae0b0a01fdd90486c616d5dddd318a8fb9f0 (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.cxx23
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) {