Commit a73ea66e authored by Alexis Ballier's avatar Alexis Ballier Committed by Rémi Denis-Courmont

xcb_window: Use sysconf to discover HOST_NAME_MAX.

POSIX does not mandate HOST_NAME_MAX to be defined and FreeBSD does not
define it to encourage people to use sysconf() for discovering its
value. If sysconf fails, fallback to _POSIX_HOST_NAME_MAX.

Signed-off-by: Rémi Denis-Courmont <remi@remlab.net> (with minor changes)
parent c6a97a1b
...@@ -27,8 +27,8 @@ ...@@ -27,8 +27,8 @@
#include <stdarg.h> #include <stdarg.h>
#include <assert.h> #include <assert.h>
#include <poll.h> #include <poll.h>
#include <unistd.h> /* gethostname() */ #include <unistd.h> /* gethostname() and sysconf() */
#include <limits.h> /* HOST_NAME_MAX */ #include <limits.h> /* _POSIX_HOST_NAME_MAX */
#include <xcb/xcb.h> #include <xcb/xcb.h>
typedef xcb_atom_t Atom; typedef xcb_atom_t Atom;
...@@ -96,13 +96,18 @@ void set_ascii_prop (xcb_connection_t *conn, xcb_window_t window, ...@@ -96,13 +96,18 @@ void set_ascii_prop (xcb_connection_t *conn, xcb_window_t window,
static inline static inline
void set_hostname_prop (xcb_connection_t *conn, xcb_window_t window) void set_hostname_prop (xcb_connection_t *conn, xcb_window_t window)
{ {
char hostname[HOST_NAME_MAX]; char* hostname;
long host_name_max = sysconf (_SC_HOST_NAME_MAX);
if (host_name_max <= 0) host_name_max = _POSIX_HOST_NAME_MAX;
hostname = malloc (host_name_max);
if(!hostname) return;
if (gethostname (hostname, sizeof (hostname)) == 0) if (gethostname (hostname, host_name_max) == 0)
{ {
hostname[sizeof (hostname) - 1] = '\0'; hostname[host_name_max - 1] = '\0';
set_ascii_prop (conn, window, XA_WM_CLIENT_MACHINE, hostname); set_ascii_prop (conn, window, XA_WM_CLIENT_MACHINE, hostname);
} }
free(hostname);
} }
static inline static inline
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment