From 0ebf3e6925d3fe95287fcc8f3e1763af4254ed1a Mon Sep 17 00:00:00 2001 From: Assar Westerlund Date: Sat, 14 Sep 1996 01:13:43 +0000 Subject: [PATCH] (get_local_xsocket): Now try to allocate the first free socket in /tmp/.X11-unix. Also `mkdir' this directory first. Return the number of the display opened. git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@729 ec53bebd-3082-4978-b11e-865c3cabbd6b --- appl/kx/common.c | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/appl/kx/common.c b/appl/kx/common.c index 37e94e03f..08168183e 100644 --- a/appl/kx/common.c +++ b/appl/kx/common.c @@ -86,14 +86,19 @@ childhandler (int sig) } /* - * Allocate and listen on a local X server socket, display dnr. + * Allocate and listen on a local X server socket. */ +#define TMPX11 "/tmp/.X11-unix" + int -get_local_xsocket (unsigned dnr) +get_local_xsocket (int *num) { int fd; struct sockaddr_un addr; + int dpy; + + mkdir (TMPX11, 01777); fd = socket (AF_UNIX, SOCK_STREAM, 0); if (fd < 0) { @@ -101,8 +106,17 @@ get_local_xsocket (unsigned dnr) return fd; } addr.sun_family = AF_UNIX; - sprintf (addr.sun_path, "/tmp/.X11-unix/X%u", dnr); - unlink (addr.sun_path); + for(dpy = 0; dpy < 256; ++dpy) { + struct stat statbuf; + + sprintf (addr.sun_path, TMPX11 "/X%u", dpy); + if(lstat(addr.sun_path, &statbuf) < 0 && errno == ENOENT) + break; + } + if (dpy == 256) { + fprintf (stderr, "%s: no free x-servers\n", prog); + return -1; + } if(bind (fd, (struct sockaddr *)&addr, sizeof(addr)) < 0) { fprintf (stderr, "%s: bind: %s\n", prog, strerror(errno)); @@ -113,6 +127,7 @@ get_local_xsocket (unsigned dnr) strerror(errno)); return -1; } + *num = dpy; return fd; }