summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNiclas Zeising <zeising@daemonic.se>2016-08-31 19:12:27 +0200
committerNiclas Zeising <zeising@daemonic.se>2016-08-31 19:12:27 +0200
commit873c84f0722b4edf98e46d6c966c0d3618bfb2ac (patch)
tree8d619314631565908bf28da48d8c60d46c49ef7f
parentf940401bbcf0af43adbf28748a717edd651bbe22 (diff)
Fix build on FreeBSD.
FreeBSD lacks the constant HOST_NAME_MAX, instead using sysconf(3) to find out the value of the maximum host name length at run time. Patch to use this instead of HOST_NAME_MAX. This brings with it the need to use malloc instead of using a statically sized buffer for the host name, since the size of the buffer cannot be known at run time. Errors from sysconf or malloc just means that the entire block of code is skipped over (the same way it's skipped if the call to gethostname() fails), rather than returning any kind of error to the caller or logging an error message somewhere.
-rw-r--r--src/winwidget.c18
1 files changed, 12 insertions, 6 deletions
diff --git a/src/winwidget.c b/src/winwidget.c
index 9495c7f..945c123 100644
--- a/src/winwidget.c
+++ b/src/winwidget.c
@@ -152,8 +152,9 @@ 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;
- char hostname[HOST_NAME_MAX];
+ char *hostname;
D(("winwidget_create_window %dx%d\n", w, h));
@@ -278,11 +279,16 @@ 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);
- 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));
+ 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) {
+ hostname[host_name_max] = '\0';
+ prop = XInternAtom(disp, "WM_CLIENT_MACHINE", False);
+ XChangeProperty(disp, ret->win, prop, XA_STRING, sizeof(char) * 8,
+ PropModeReplace, (unsigned char *)hostname, strlen(hostname));
+ }
+ free(hostname);
+ }
}
XSetWMProtocols(disp, ret->win, &wmDeleteWindow, 1);