diff options
| author | Niclas Zeising <zeising@daemonic.se> | 2016-08-31 20:03:36 +0200 | 
|---|---|---|
| committer | Niclas Zeising <zeising@daemonic.se> | 2016-08-31 20:03:36 +0200 | 
| commit | 5ab630b59fe449c451d3a6f024d3c997af020a22 (patch) | |
| tree | 8b373d597e34d667c8a28e986a714f1d9f48eebb /src | |
| parent | 873c84f0722b4edf98e46d6c966c0d3618bfb2ac (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.
Diffstat (limited to 'src')
| -rw-r--r-- | src/winwidget.c | 17 | 
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); | 
