diff options
author | Jeremy Huddleston <jeremyhu@freedesktop.org> | 2008-05-19 03:13:09 -0700 |
---|---|---|
committer | Jeremy Huddleston <jeremyhu@freedesktop.org> | 2008-05-19 03:13:09 -0700 |
commit | 7dd351271522b475d8017e4bd1618f12817ee2fa (patch) | |
tree | b597e2f208bc1e0309f470d1a081def802d9b96f | |
parent | cccee9cfc29f85cca635df3b8dd54199b45c4df8 (diff) |
XQuartz: Fixed a few issues with fd passing... still not working =(
-rw-r--r-- | hw/xquartz/mach-startup/bundle-main.c | 14 | ||||
-rw-r--r-- | hw/xquartz/mach-startup/stub.c | 15 |
2 files changed, 14 insertions, 15 deletions
diff --git a/hw/xquartz/mach-startup/bundle-main.c b/hw/xquartz/mach-startup/bundle-main.c index c9751236f..0fab99044 100644 --- a/hw/xquartz/mach-startup/bundle-main.c +++ b/hw/xquartz/mach-startup/bundle-main.c @@ -163,10 +163,11 @@ static void accept_fd_handoff(int connected_fd) { launchd_fd = *((int*)CMSG_DATA(cmsg)); - if(launchd_fd > 0) - DarwinListenOnOpenFD(launchd_fd); - else + if(launchd_fd == -1) fprintf(stderr, "Error receiving $DISPLAY file descriptor, no descriptor received? %d\n", launchd_fd); + + fprintf(stderr, "Received new DISPLAY fd: %d\n", launchd_fd); + DarwinListenOnOpenFD(launchd_fd); } typedef struct { @@ -227,9 +228,6 @@ static void socket_handoff_thread(void *arg) { connected_fd = accept(handoff_fd, NULL, NULL); - /* We delete this temporary socket after we get the connection */ - unlink(filename); - if(connected_fd == -1) { fprintf(stderr, "Failed to accept incoming connection on socket: %s - %s\n", filename, strerror(errno)); return; @@ -237,8 +235,10 @@ static void socket_handoff_thread(void *arg) { /* Now actually get the passed file descriptor from this connection */ accept_fd_handoff(connected_fd); - + + close(connected_fd); close(handoff_fd); + unlink(filename); } kern_return_t do_prep_fd_handoff(mach_port_t port, string_t socket_filename) { diff --git a/hw/xquartz/mach-startup/stub.c b/hw/xquartz/mach-startup/stub.c index 0a9ab669c..854b71cbe 100644 --- a/hw/xquartz/mach-startup/stub.c +++ b/hw/xquartz/mach-startup/stub.c @@ -113,7 +113,7 @@ static void set_x11_path() { } } -static void send_fd_handoff(int connected_fd, int launchd_fd) { +static void send_fd_handoff(int handoff_fd, int launchd_fd) { char databuf[] = "display"; struct iovec iov[1]; @@ -143,19 +143,19 @@ static void send_fd_handoff(int connected_fd, int launchd_fd) { *((int*)CMSG_DATA(cmsg)) = launchd_fd; - if (sendmsg(connected_fd, &msg, 0) < 0) { + if (sendmsg(handoff_fd, &msg, 0) < 0) { fprintf(stderr, "Error sending $DISPLAY file descriptor: %s\n", strerror(errno)); return; } - fprintf(stderr, "send %d %d %d %s\n", connected_fd, launchd_fd, errno, strerror(errno)); + fprintf(stderr, "send %d %d %d %s\n", handoff_fd, launchd_fd, errno, strerror(errno)); } static void handoff_fd(const char *filename, int launchd_fd) { struct sockaddr_un servaddr_un; struct sockaddr *servaddr; socklen_t servaddr_len; - int handoff_fd, connected_fd; + int handoff_fd; /* Setup servaddr_un */ memset (&servaddr_un, 0, sizeof (struct sockaddr_un)); @@ -171,15 +171,14 @@ static void handoff_fd(const char *filename, int launchd_fd) { return; } - connected_fd = connect(handoff_fd, servaddr, servaddr_len); - - if(connected_fd == -1) { + if(connect(handoff_fd, servaddr, servaddr_len) < 0) { fprintf(stderr, "Failed to establish connection on socket: %s - %s\n", filename, strerror(errno)); return; } - send_fd_handoff(connected_fd, launchd_fd); + fprintf(stderr, "Socket: %s\n", filename); + send_fd_handoff(handoff_fd, launchd_fd); close(handoff_fd); } |