1 #define I_ERRNO
2 #define I_SYS
3 #define I_IOCTL
4 #define I_STRING
5 #define I_SOCKET
6 
7 #include "includes.h"
8 #include <signal.h>
9 
10 char *local_x =  "/tmp/.X11-unix/X0";
11 
12 int display_num = 9;
13 int debug = 0;
14 
xc_connect_server(int dummy)15 int xc_connect_server(int dummy) {
16   int s;
17   signal(SIGPIPE, SIG_IGN);
18   if ((s = connect_server(0)) < 0)
19     return -1;
20   if(getenv("XSERVERPATH")) local_x=getenv("XSERVERPATH");
21   if (send_command(s, C_SOCKET, 0, "%s", local_x)<0)
22     return -1;
23 
24   send_command(s, C_DUMB, 1, 0);
25 
26   return s;
27 }
28 
29 
main(int argc,char * argv[])30 void main(int argc, char *argv[]) {
31   int s;
32   char *home;
33   char *display;
34   int svs[1];
35 #ifdef UNIX_SOCKET
36   char unix_sock[110];
37 #endif
38 
39   setbuf(stderr, 0);
40   display = getenv("DISPLAY");
41 
42 #ifdef UNIX_SOCKET
43   if (!display || display[0] != ':' || !display[1])
44     display = ":9";
45 
46   sprintf(unix_sock,"/tmp/.X11-unix");
47   mkdir(unix_sock, 0700);
48   strcat(unix_sock, "/X");
49   strcat(unix_sock, display+1);
50 
51   if ((s = bind_unix(unix_sock)) < 0) {
52     exit(1);
53   }
54 
55 #else /* if a TCP socket.. */
56 				/* Try and work out what display we */
57 				/* should get by default. */
58   if (!display || !display[0]) { /* is there a DISPLAY set?? */
59     display_num = 9;		/* No. Just pick 9 by default */
60   } else {
61     home = strchr(display,':');	/* Yes. Find out what display number. */
62     if (home)			/* if we could work it out.. */
63       display_num = atoi(home+1); /* then grab the number. */
64     if (display_num < 1)	/* if the number is invalid,  */
65       display_num = 9;		/* just default. */
66   }
67 
68   while (( s = bind_tcp(6000 + display_num)) == -2) {
69     if (display_num > 100) {
70       printf("Unable to bind socket\n");
71       exit(1);
72       break;
73     }
74     ++display_num;
75   }
76 
77   fprintf(stderr, "Xconn bound to screen %d\n", display_num);
78   printf(":%d\n", display_num);
79 
80 #endif
81   svs[0] = s;
82   do_connect(1, svs, xc_connect_server); /* Never exits. */
83 }
84