summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNiclas Zeising <zeising@daemonic.se>2016-08-31 20:03:36 +0200
committerNiclas Zeising <zeising@daemonic.se>2016-08-31 20:03:36 +0200
commit5ab630b59fe449c451d3a6f024d3c997af020a22 (patch)
tree8b373d597e34d667c8a28e986a714f1d9f48eebb
parent873c84f0722b4edf98e46d6c966c0d3618bfb2ac (diff)
Only use sysconf() if HOST_NAME_MAX is undefined
On some systsems sysconf() can return a very large value, unsuitable for use with malloc(). Only use sysconf() if HOST_NAME_MAX isn't avalable.
-rw-r--r--src/winwidget.c17
1 files changed, 15 insertions, 2 deletions
diff --git a/src/winwidget.c b/src/winwidget.c
index 945c123..dc1fe13 100644
--- a/src/winwidget.c
+++ b/src/winwidget.c
@@ -152,9 +152,13 @@ void winwidget_create_window(winwidget ret, int w, int h)
pid_t pid;
int x = 0;
int y = 0;
- long host_name_max;
char *tmpname;
+#ifdef HOST_NAME_MAX
+ char hostname[HOST_NAME_MAX];
+#else /* ! HOST_NAME_MAX */
+ long host_name_max;
char *hostname;
+#endif /* HOST_NAME_MAX */
D(("winwidget_create_window %dx%d\n", w, h));
@@ -279,6 +283,14 @@ void winwidget_create_window(winwidget ret, int w, int h)
XChangeProperty(disp, ret->win, prop, XA_CARDINAL, sizeof(pid_t) * 8,
PropModeReplace, (const unsigned char *)&pid, 1);
+#ifdef HOST_NAME_MAX
+ if (gethostname(hostname, HOST_NAME_MAX) == 0) {
+ hostname[HOST_NAME_MAX-1] = '\0';
+ prop = XInternAtom(disp, "WM_CLIENT_MACHINE", False);
+ XChangeProperty(disp, ret->win, prop, XA_STRING, sizeof(char) * 8,
+ PropModeReplace, (unsigned char *)hostname, strlen(hostname));
+ }
+#else /* ! HOST_NAME_MAX */
if ((host_name_max = sysconf(_SC_HOST_NAME_MAX)) != -1 ) {
if ((hostname = calloc(1, host_name_max + 1)) != NULL ) {
if (gethostname(hostname, host_name_max) == 0) {
@@ -287,9 +299,10 @@ void winwidget_create_window(winwidget ret, int w, int h)
XChangeProperty(disp, ret->win, prop, XA_STRING, sizeof(char) * 8,
PropModeReplace, (unsigned char *)hostname, strlen(hostname));
}
- free(hostname);
+ free(hostname);
}
}
+#endif /* HOST_NAME_MAX */
XSetWMProtocols(disp, ret->win, &wmDeleteWindow, 1);
winwidget_update_title(ret);