(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
|
int
|
||||||
get_local_xsocket (unsigned dnr)
|
get_local_xsocket (int *num)
|
||||||
{
|
{
|
||||||
int fd;
|
int fd;
|
||||||
struct sockaddr_un addr;
|
struct sockaddr_un addr;
|
||||||
|
int dpy;
|
||||||
|
|
||||||
|
mkdir (TMPX11, 01777);
|
||||||
|
|
||||||
fd = socket (AF_UNIX, SOCK_STREAM, 0);
|
fd = socket (AF_UNIX, SOCK_STREAM, 0);
|
||||||
if (fd < 0) {
|
if (fd < 0) {
|
||||||
@@ -101,8 +106,17 @@ get_local_xsocket (unsigned dnr)
|
|||||||
return fd;
|
return fd;
|
||||||
}
|
}
|
||||||
addr.sun_family = AF_UNIX;
|
addr.sun_family = AF_UNIX;
|
||||||
sprintf (addr.sun_path, "/tmp/.X11-unix/X%u", dnr);
|
for(dpy = 0; dpy < 256; ++dpy) {
|
||||||
unlink (addr.sun_path);
|
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) {
|
if(bind (fd, (struct sockaddr *)&addr, sizeof(addr)) < 0) {
|
||||||
fprintf (stderr, "%s: bind: %s\n", prog,
|
fprintf (stderr, "%s: bind: %s\n", prog,
|
||||||
strerror(errno));
|
strerror(errno));
|
||||||
@@ -113,6 +127,7 @@ get_local_xsocket (unsigned dnr)
|
|||||||
strerror(errno));
|
strerror(errno));
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
*num = dpy;
|
||||||
return fd;
|
return fd;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user