]> git.sesse.net Git - vlc/commitdiff
xcb_window: Use sysconf to discover HOST_NAME_MAX.
authorAlexis Ballier <aballier@gentoo.org>
Fri, 10 Jul 2009 13:04:42 +0000 (15:04 +0200)
committerRémi Denis-Courmont <remi@remlab.net>
Sat, 11 Jul 2009 10:17:50 +0000 (13:17 +0300)
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)
modules/video_output/xcb/window.c

index 0ec23ddc7b770836231eea9620aaf6c20d3739a0..d8db2434e847fef64c53219f0fb8a51d40596927 100644 (file)
@@ -27,8 +27,8 @@
 #include <stdarg.h>
 #include <assert.h>
 #include <poll.h>
-#include <unistd.h> /* gethostname() */
-#include <limits.h> /* HOST_NAME_MAX */
+#include <unistd.h> /* gethostname() and sysconf() */
+#include <limits.h> /* _POSIX_HOST_NAME_MAX */
 
 #include <xcb/xcb.h>
 typedef xcb_atom_t Atom;
@@ -96,13 +96,18 @@ void set_ascii_prop (xcb_connection_t *conn, xcb_window_t window,
 static inline
 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);
     }
+    free(hostname);
 }
 
 static inline