|
Lines 3332-3338
x11_create_display_inet(int x11_display_
Link Here
|
| 3332 |
} |
3332 |
} |
| 3333 |
|
3333 |
|
| 3334 |
static int |
3334 |
static int |
| 3335 |
connect_local_xsocket_path(const char *pathname) |
3335 |
connect_local_xsocket_path(const char *pathname, int len) |
| 3336 |
{ |
3336 |
{ |
| 3337 |
int sock; |
3337 |
int sock; |
| 3338 |
struct sockaddr_un addr; |
3338 |
struct sockaddr_un addr; |
|
Lines 3342-3348
connect_local_xsocket_path(const char *p
Link Here
|
| 3342 |
error("socket: %.100s", strerror(errno)); |
3342 |
error("socket: %.100s", strerror(errno)); |
| 3343 |
memset(&addr, 0, sizeof(addr)); |
3343 |
memset(&addr, 0, sizeof(addr)); |
| 3344 |
addr.sun_family = AF_UNIX; |
3344 |
addr.sun_family = AF_UNIX; |
| 3345 |
strlcpy(addr.sun_path, pathname, sizeof addr.sun_path); |
3345 |
if (len > sizeof addr.sun_path) |
|
|
3346 |
len = sizeof addr.sun_path; |
| 3347 |
memcpy(addr.sun_path, pathname , len); |
| 3346 |
if (connect(sock, (struct sockaddr *)&addr, sizeof(addr)) == 0) |
3348 |
if (connect(sock, (struct sockaddr *)&addr, sizeof(addr)) == 0) |
| 3347 |
return sock; |
3349 |
return sock; |
| 3348 |
close(sock); |
3350 |
close(sock); |
|
Lines 3354-3361
static int
Link Here
|
| 3354 |
connect_local_xsocket(u_int dnr) |
3356 |
connect_local_xsocket(u_int dnr) |
| 3355 |
{ |
3357 |
{ |
| 3356 |
char buf[1024]; |
3358 |
char buf[1024]; |
| 3357 |
snprintf(buf, sizeof buf, _PATH_UNIX_X, dnr); |
3359 |
#ifdef linux |
| 3358 |
return connect_local_xsocket_path(buf); |
3360 |
int len, ret; |
|
|
3361 |
#endif |
| 3362 |
len = snprintf(buf, sizeof buf, _PATH_UNIX_X, dnr); |
| 3363 |
#ifdef linux |
| 3364 |
/* try abstract socket first */ |
| 3365 |
buf[0] = '\0'; |
| 3366 |
if ((ret = connect_local_xsocket_path(buf, len)) >= 0) |
| 3367 |
return ret; |
| 3368 |
buf[0] = '/'; |
| 3369 |
#endif |
| 3370 |
return connect_local_xsocket_path(buf, len); |
| 3359 |
} |
3371 |
} |
| 3360 |
|
3372 |
|
| 3361 |
int |
3373 |
int |