(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
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user