summaryrefslogtreecommitdiff
path: root/lib/libxtrans
diff options
context:
space:
mode:
authorMatthieu Herrb <matthieu@cvs.openbsd.org>2008-05-24 15:44:22 +0000
committerMatthieu Herrb <matthieu@cvs.openbsd.org>2008-05-24 15:44:22 +0000
commit8d1f1e51a94b497e7d18f4eab311962119d29f2b (patch)
tree7d3f3e2072bbe8cc8a2648883615d9a8c74c821f /lib/libxtrans
parentd9c081456b4e271f93cfc07c3a66663f188edf7a (diff)
Update to libxtrans 1.2
Diffstat (limited to 'lib/libxtrans')
-rw-r--r--lib/libxtrans/ChangeLog208
-rw-r--r--lib/libxtrans/Xtrans.c91
-rw-r--r--lib/libxtrans/Xtrans.h6
-rw-r--r--lib/libxtrans/Xtransdnet.c6
-rw-r--r--lib/libxtrans/Xtransint.h16
-rw-r--r--lib/libxtrans/Xtranslcl.c8
-rw-r--r--lib/libxtrans/Xtranssock.c253
-rw-r--r--lib/libxtrans/Xtranstli.c6
-rw-r--r--lib/libxtrans/Xtransutil.c14
-rw-r--r--lib/libxtrans/aclocal.m44
-rw-r--r--lib/libxtrans/configure24
-rw-r--r--lib/libxtrans/configure.ac5
-rw-r--r--lib/libxtrans/transport.c6
-rw-r--r--lib/libxtrans/xtrans.m418
14 files changed, 518 insertions, 147 deletions
diff --git a/lib/libxtrans/ChangeLog b/lib/libxtrans/ChangeLog
index 1e1837aa6..85d971de8 100644
--- a/lib/libxtrans/ChangeLog
+++ b/lib/libxtrans/ChangeLog
@@ -1,3 +1,211 @@
+commit e75b9dad0ae4bc0869af81652d8259675a3c5cac
+Author: Julien Cristau <jcristau@debian.org>
+Date: Thu May 8 16:27:29 2008 +0200
+
+ Bump to 1.2
+
+commit 962ad4d3f8096f5ffa14b32b3ee094f250790c77
+Author: Alan Hourihane <alanh@tungstengraphics.com>
+Date: Mon Apr 28 23:46:05 2008 +0100
+
+ disable UNIXCONN on MINGW
+
+commit 9e8c0e3356bc6359368b7655d3a717d6c000387e
+Author: Alan Hourihane <alanh@tungstengraphics.com>
+Date: Sat Apr 26 16:23:19 2008 +0100
+
+ fix build for MAKEWORD
+
+commit 568c5ea02ee1de437833ee0b53a7b3fd7ece084f
+Author: Colin Harrison <colin.harrison-at-virgin.net>
+Date: Sat Apr 26 08:53:13 2008 +0100
+
+ Update to winsock2
+
+commit 960902584a3ef125946beb5ebe331b54d697e9d9
+Author: James Cloos <cloos@jhcloos.com>
+Date: Fri Apr 25 15:53:20 2008 -0400
+
+ Fix length calculation for the path for abstract unix domain sockets
+
+ Since the struct has a fixed-lenght char[] its sizeof() contains
+ trailing NUL octets which results in corrupt abstract sockets.
+
+ Instead, take the strlen(3) of the path, plus the single NUL octet
+ (which identifies the path as an abstract path rather than a file-
+ system path) plus the offset from the start of the struct to the
+ start of the char array.
+
+ This fixes:
+
+ https://bugs.freedesktop.org/show_bug.cgi?id=15677
+
+commit 3a2a5375b8aab85697b4f2644ab99c3ccf79e658
+Author: Colin Harrison <colin.harrison-at-virgin.net>
+Date: Wed Apr 23 10:39:30 2008 +0100
+
+ Only call WSAGetLastError() if there has been an
+ error condition.
+
+commit ac13a1a34b61247a21da130f0ba9922f35d3dc3b
+Author: Alan Coopersmith <alan.coopersmith@sun.com>
+Date: Tue Apr 15 12:32:35 2008 -0700
+
+ Sun bug #6688467: _X11TransConvertAddress: Unknown family type on 64-bit SPARC
+
+ Check for socklen_t definition and if found use it instead of size_t or
+ int for the length argument to getpeername/getsockname/etc.
+
+ <http://bugs.opensolaris.org/bugdatabase/view_bug.do?bug_id=6688467>
+
+commit 556a351de83fc6f401b02213dae95731553c216d
+Author: Loïc Minier <lool@dooz.org>
+Date: Mon Mar 24 15:38:27 2008 -0400
+
+ Bug #10489: Don't retry unix socket connect()s on ENOENT.
+
+ If the socket isn't there, it's not gonna magically appear. Either it's
+ a server socket and you should have just waited for the SIGUSR1 from the
+ server, or it's a stale reference to an ICE socket.
+
+ However, do retry once, so fallback from abstract to filesystem namespace
+ works.
+
+ Originally Debian bug #385976.
+
+commit 3de3e666e0653d4e8ae23fc3e6e31864ddad4059
+Author: Julien Cristau <jcristau@debian.org>
+Date: Sun Mar 23 19:43:32 2008 +0100
+
+ BSD44SOCKETS is the wrong check for SOCK_MAXADDRLEN
+
+ GNU/kFreeBSD defines BSD44SOCKETS, but doesn't have SOCK_MAXADDRLEN.
+ Check for the latter directly.
+
+commit 662994b9096181117cec4cae88f24bf6da806159
+Author: Adam Jackson <ajax@redhat.com>
+Date: Wed Mar 5 21:02:28 2008 -0500
+
+ xtrans 1.1
+
+commit 2afe206ec9569e0d62caa6d91c3fb057b0efa23d
+Author: Adam Jackson <ajax@redhat.com>
+Date: Wed Mar 5 20:48:59 2008 -0500
+
+ Add support for the abstract socket namespace under Linux.
+
+ Unlike normal unix sockets, the abstract namespace is not bound to the
+ filesystem. This has some notable advantages; /tmp need not exist, the
+ socket directory need not have magic permissions, etc. xtrans servers
+ will listen on both the normal and abstract socket endpoints; clients
+ will attempt to connect to the abstract socket before connecting to the
+ corresponding filesystem socket.
+
+ Based on a patch by Bill Crawford.
+
+commit c8ed67f16f71042ef134a4d2189c20dd200a0648
+Author: Jeremy Huddleston <jeremy@tifa.local>
+Date: Sun Feb 10 19:04:40 2008 -0800
+
+ Fixed #ifdef checks that were using i386 to use __i386__
+
+ """
+
+ It's simply obsolete, sloppy, compiler namespace pollution. The
+ compiler is not allowed to predefine symbols that might conflict with
+ ordinary identifiers. For backwards compatibility gcc currently
+ predefines i386 when compiling for x86 32-bit (but not 64-bit), but that
+ will go away. It is also not defined if you specify -ansi when invoking
+ the compiler, because then it is seriously standards compliant. Other
+ compilers shouldn't define it either. Correct code shouldn't rely on it
+ being defined. However __i386__ is safe and proper.
+
+ """
+
+commit 9970b5b6f8237685267b7972282319cf266661ea
+Author: Ben Byer <bbyer@bbyer.local>
+Date: Sun Dec 2 07:36:51 2007 -0800
+
+ make launchd error messages less scary
+
+commit cd1da5cec49fb7fe6238a00d9ba550b3ed78fa08
+Author: Ben Byer <bbyer@bbyer.local>
+Date: Wed Nov 14 03:57:57 2007 -0800
+
+ Fix for incorrect processing of recycled launchd socket on OS X
+
+commit 3da4d6c1dc05f9e1291b023a97535eb67f0830e2
+Author: Ben Byer <bbyer@bbyer.local>
+Date: Wed Nov 14 03:55:42 2007 -0800
+
+ removed cvs tags
+
+commit 496cf2c46d2123c3bed3e6878f8f9a62e87ce559
+Author: Dodji Seketeli <dodji@seketeli.org>
+Date: Tue Sep 11 12:52:44 2007 +0200
+
+ libxtrans: fixed a typo in my last commit
+
+ * Xtranssock.c: (SocketReopen): oops fix a typo in my last commit.
+
+commit 88e141225113fcc4ebe5e8fe361e75673cdbf9ff
+Author: Dodji Seketeli <dodji@seketeli.org>
+Date: Tue Sep 11 08:48:03 2007 +0200
+
+ libxtrans: fix linux compilation breakage
+
+ * Xtranssock.c:
+ (SocketReopen): protect use of BSD4.4 socket with BSD44SOCKETS macro.
+ protect use of strlcnpy with HAVE_STRLCPY macro.
+ That one is defined (or not) by the xserver configure.
+
+commit 6217f34977bfa17b66b89df5d45420774abedcb3
+Author: Ben Byer <bbyer@bbyer.apple.com>
+Date: Wed Sep 5 18:29:44 2007 -0700
+
+ changes to support launchd on OS X
+
+commit 4d0cfe491046df26027db291530b247b7f24df5b
+Author: Ben Byer <bbyer@bbyer.apple.com>
+Date: Wed Sep 5 18:04:01 2007 -0700
+
+ suppress warning about socket directory ownership on OS X
+
+ We don't need to warn the user about the fact that the socket
+ directory is not owned by root under OS X; on that platform,
+ it's never owned by root, as the X server runs as the normal user.
+
+commit de93d67f6d48c7c08f2554cb85515bcf7dfbffb2
+Author: Alan Coopersmith <alan.coopersmith@sun.com>
+Date: Tue Aug 21 17:54:23 2007 -0700
+
+ Version bump: 1.0.4
+
+commit 5e16b0ebccb233f7aeaf3928a853ee966b7cbb39
+Author: Kean Johnston <kean@armory.com>
+Date: Wed Jul 18 09:27:06 2007 -0700
+
+ Fix typo in Xtranslcl.c (sprintf with size argument should be snprintf)
+
+commit 1abc981349140260d6fb643d29cf2b851fc06ac9
+Author: Daniel Stone <daniel@fooishbar.org>
+Date: Sat Dec 16 01:15:21 2006 +0200
+
+ bump to 1.0.3
+
+commit 8172528bb894856aa5b133f61444294dc5a347e6
+Author: Daniel Stone <daniel@fooishbar.org>
+Date: Wed Dec 6 18:51:59 2006 +0200
+
+ Makefile.am: make ChangeLog hook safer
+ Make ChangeLog hook as safe as possible.
+
+commit 5ffb704b1df9ec44a448d53d4c20b9d4c5d825d4
+Author: Adam Jackson <ajax@benzedrine.nwnk.net>
+Date: Fri Oct 13 17:01:59 2006 -0400
+
+ Bump to 1.0.2
+
commit ae3b57953f5c1fa875d19fb42a2178d7e594ea44
Author: Adam Jackson <ajax@benzedrine.nwnk.net>
Date: Thu Oct 12 20:36:52 2006 -0400
diff --git a/lib/libxtrans/Xtrans.c b/lib/libxtrans/Xtrans.c
index f92fc7b77..fde3cb073 100644
--- a/lib/libxtrans/Xtrans.c
+++ b/lib/libxtrans/Xtrans.c
@@ -1,5 +1,3 @@
-/* $XdotOrg: xc/lib/xtrans/Xtrans.c,v 1.4 2004/11/15 15:06:56 ago Exp $ */
-/* $Xorg: Xtrans.c,v 1.4 2001/02/09 02:04:06 xorgcvs Exp $ */
/*
Copyright 1993, 1994, 1998 The Open Group
@@ -26,10 +24,7 @@ not be used in advertising or otherwise to promote the sale, use or
other dealings in this Software without prior written authorization
from The Open Group.
-*/
-/* $XFree86: xc/lib/xtrans/Xtrans.c,v 3.33 2003/08/11 17:41:29 eich Exp $ */
-
-/* Copyright 1993, 1994 NCR Corporation - Dayton, Ohio, USA
+ * Copyright 1993, 1994 NCR Corporation - Dayton, Ohio, USA
*
* All Rights Reserved
*
@@ -53,6 +48,9 @@ from The Open Group.
*/
#include <ctype.h>
+#ifdef HAVE_LAUNCHD
+#include <launch.h>
+#endif
/*
* The transport table contains a definition for every transport (protocol)
@@ -362,6 +360,15 @@ TRANS(ParseAddress) (char *address, char **protocol, char **host, char **port)
*/
#endif
+#ifdef HAVE_LAUNCHD
+ /* launchd sockets will look like 'local//tmp/launch-XgkNns/:0' */
+ if(address != NULL && strlen(address)>8 && (!strncmp(address,"local//",7))) {
+ _protocol="local";
+ _host="";
+ _port=address+6;
+ }
+#endif
+
/*
* Now that we have all of the components, allocate new
* string space for them.
@@ -866,6 +873,10 @@ TRANS(Connect) (XtransConnInfo ciptr, char *address)
return -1;
}
+#ifdef HAVE_LAUNCHD
+ if (!host || !*host) host=strdup("");
+#endif
+
if (!port || !*port)
{
PRMSG (1,"Connect: Missing port specification in %s\n",
@@ -1061,15 +1072,73 @@ TRANS(MakeAllCOTSServerListeners) (char *port, int *partial, int *count_ret,
char buffer[256]; /* ??? What size ?? */
XtransConnInfo ciptr, temp_ciptrs[NUMTRANS];
int status, i, j;
+#ifdef HAVE_LAUNCHD
+ int launchd_fd;
+ launch_data_t sockets_dict, checkin_request, checkin_response;
+ launch_data_t listening_fd_array, listening_fd;
+#endif
+
#if defined(IPv6) && defined(AF_INET6)
int ipv6_succ = 0;
#endif
-
PRMSG (2,"MakeAllCOTSServerListeners(%s,%p)\n",
port ? port : "NULL", ciptrs_ret, 0);
*count_ret = 0;
+#ifdef HAVE_LAUNCHD
+ /* Get launchd fd */
+ if ((checkin_request = launch_data_new_string(LAUNCH_KEY_CHECKIN)) == NULL) {
+ fprintf(stderr,"launch_data_new_string(\"" LAUNCH_KEY_CHECKIN "\") Unable to create string.\n");
+ goto not_launchd;
+ }
+
+ if ((checkin_response = launch_msg(checkin_request)) == NULL) {
+ fprintf(stderr,"launch_msg(\"" LAUNCH_KEY_CHECKIN "\") IPC failure: %s\n",strerror(errno));
+ goto not_launchd;
+ }
+
+ if (LAUNCH_DATA_ERRNO == launch_data_get_type(checkin_response)) {
+ // ignore EACCES, which is common if we weren't started by launchd
+ if (launch_data_get_errno(checkin_response) != EACCES)
+ fprintf(stderr,"launchd check-in failed: %s\n",strerror(launch_data_get_errno(checkin_response)));
+ goto not_launchd;
+ }
+
+ sockets_dict = launch_data_dict_lookup(checkin_response, LAUNCH_JOBKEY_SOCKETS);
+ if (NULL == sockets_dict) {
+ fprintf(stderr,"launchd check-in: no sockets found to answer requests on!\n");
+ goto not_launchd;
+ }
+
+ if (launch_data_dict_get_count(sockets_dict) > 1) {
+ fprintf(stderr,"launchd check-in: some sockets will be ignored!\n");
+ goto not_launchd;
+ }
+
+ listening_fd_array = launch_data_dict_lookup(sockets_dict, ":0");
+ if (NULL == listening_fd_array) {
+ fprintf(stderr,"launchd check-in: No known sockets found to answer requests on!\n");
+ goto not_launchd;
+ }
+
+ if (launch_data_array_get_count(listening_fd_array)!=1) {
+ fprintf(stderr,"launchd check-in: Expected 1 socket from launchd, got %d)\n",
+ launch_data_array_get_count(listening_fd_array));
+ goto not_launchd;
+ }
+
+ listening_fd=launch_data_array_get_index(listening_fd_array, 0);
+ launchd_fd=launch_data_get_fd(listening_fd);
+ fprintf(stderr,"Xquartz: run by launchd for fd %d\n",launchd_fd);
+ if((ciptr = TRANS(ReopenCOTSServer(TRANS_SOCKET_LOCAL_INDEX,
+ launchd_fd, getenv("DISPLAY"))))==NULL)
+ fprintf(stderr,"Got NULL while trying to Reopen launchd port\n");
+ else temp_ciptrs[(*count_ret)++] = ciptr;
+
+not_launchd:
+#endif
+
for (i = 0; i < NUMTRANS; i++)
{
Xtransport *trans = Xtransports[i].transport;
@@ -1316,7 +1385,7 @@ static int TRANS(WriteV) (XtransConnInfo ciptr, struct iovec *iov, int iovcnt)
#endif /* CRAY */
-#if (defined(SYSV) && defined(i386) && !defined(__SCO__) && !defined(sun)) || defined(WIN32) || defined(__sxg__) || defined(__UNIXOS2__)
+#if (defined(SYSV) && defined(__i386__) && !defined(__SCO__) && !defined(sun)) || defined(WIN32) || defined(__sxg__) || defined(__UNIXOS2__)
/*
* emulate readv
@@ -1346,9 +1415,9 @@ static int TRANS(ReadV) (XtransConnInfo ciptr, struct iovec *iov, int iovcnt)
return total;
}
-#endif /* SYSV && i386 || WIN32 || __sxg__ */
+#endif /* SYSV && __i386__ || WIN32 || __sxg__ */
-#if (defined(SYSV) && defined(i386) && !defined(__SCO__) && !defined(sun)) || defined(WIN32) || defined(__sxg__) || defined(__UNIXOS2__)
+#if (defined(SYSV) && defined(__i386__) && !defined(__SCO__) && !defined(sun)) || defined(WIN32) || defined(__sxg__) || defined(__UNIXOS2__)
/*
* emulate writev
@@ -1378,7 +1447,7 @@ static int TRANS(WriteV) (XtransConnInfo ciptr, struct iovec *iov, int iovcnt)
return total;
}
-#endif /* SYSV && i386 || WIN32 || __sxg__ */
+#endif /* SYSV && __i386__ || WIN32 || __sxg__ */
#if (defined(_POSIX_SOURCE) && !defined(AIXV3) && !defined(__QNX__)) || defined(hpux) || defined(USG) || defined(SVR4) || defined(__SCO__)
diff --git a/lib/libxtrans/Xtrans.h b/lib/libxtrans/Xtrans.h
index e8d4bdfcd..42def323b 100644
--- a/lib/libxtrans/Xtrans.h
+++ b/lib/libxtrans/Xtrans.h
@@ -1,4 +1,3 @@
-/* $Xorg: Xtrans.h,v 1.4 2001/02/09 02:04:06 xorgcvs Exp $ */
/*
Copyright 1993, 1994, 1998 The Open Group
@@ -25,10 +24,7 @@ not be used in advertising or otherwise to promote the sale, use or
other dealings in this Software without prior written authorization
from The Open Group.
-*/
-/* $XFree86: xc/lib/xtrans/Xtrans.h,v 3.21 2003/07/20 16:12:15 tsi Exp $ */
-
-/* Copyright 1993, 1994 NCR Corporation - Dayton, Ohio, USA
+ * Copyright 1993, 1994 NCR Corporation - Dayton, Ohio, USA
*
* All Rights Reserved
*
diff --git a/lib/libxtrans/Xtransdnet.c b/lib/libxtrans/Xtransdnet.c
index ac91695c7..5e8d0088b 100644
--- a/lib/libxtrans/Xtransdnet.c
+++ b/lib/libxtrans/Xtransdnet.c
@@ -1,4 +1,3 @@
-/* $Xorg: Xtransdnet.c,v 1.4 2001/02/09 02:04:06 xorgcvs Exp $ */
/*
Copyright 1993, 1994, 1998 The Open Group
@@ -25,10 +24,7 @@ not be used in advertising or otherwise to promote the sale, use or
other dealings in this Software without prior written authorization
from The Open Group.
-*/
-/* $XFree86: xc/lib/xtrans/Xtransdnet.c,v 3.7tsi Exp $ */
-
-/* Copyright 1993, 1994 NCR Corporation - Dayton, Ohio, USA
+ * Copyright 1993, 1994 NCR Corporation - Dayton, Ohio, USA
*
* All Rights Reserved
*
diff --git a/lib/libxtrans/Xtransint.h b/lib/libxtrans/Xtransint.h
index 663c689f5..317dbf8cc 100644
--- a/lib/libxtrans/Xtransint.h
+++ b/lib/libxtrans/Xtransint.h
@@ -1,5 +1,3 @@
-/* $XdotOrg: xc/lib/xtrans/Xtransint.h,v 1.2 2004/04/23 18:44:27 eich Exp $ */
-/* $Xorg: Xtransint.h,v 1.4 2001/02/09 02:04:06 xorgcvs Exp $ */
/*
Copyright 1993, 1994, 1998 The Open Group
@@ -26,10 +24,7 @@ not be used in advertising or otherwise to promote the sale, use or
other dealings in this Software without prior written authorization
from The Open Group.
-*/
-/* $XFree86: xc/lib/xtrans/Xtransint.h,v 3.41 2003/08/28 00:35:23 tsi Exp $ */
-
-/* Copyright 1993, 1994 NCR Corporation - Dayton, Ohio, USA
+ * Copyright 1993, 1994 NCR Corporation - Dayton, Ohio, USA
*
* All Rights Reserved
*
@@ -374,16 +369,17 @@ typedef struct _Xtransport_table {
#define TRANS_DISABLED (1<<2) /* Don't open this one */
#define TRANS_NOLISTEN (1<<3) /* Don't listen on this one */
#define TRANS_NOUNLINK (1<<4) /* Dont unlink transport endpoints */
+#define TRANS_ABSTRACT (1<<5) /* Use abstract sockets if available */
/* Flags to preserve when setting others */
-#define TRANS_KEEPFLAGS (TRANS_NOUNLINK)
+#define TRANS_KEEPFLAGS (TRANS_NOUNLINK|TRANS_ABSTRACT)
/*
* readv() and writev() don't exist or don't work correctly on some
* systems, so they may be emulated.
*/
-#if defined(CRAY) || (defined(SYSV) && defined(i386) && !defined(__SCO__) && !defined(sun)) || defined(WIN32) || defined(__sxg__) || defined(__UNIXOS2__)
+#if defined(CRAY) || (defined(SYSV) && defined(__i386__) && !defined(__SCO__) && !defined(sun)) || defined(WIN32) || defined(__sxg__) || defined(__UNIXOS2__)
#define READV(ciptr, iov, iovcnt) TRANS(ReadV)(ciptr, iov, iovcnt)
@@ -397,10 +393,10 @@ static int TRANS(ReadV)(
#define READV(ciptr, iov, iovcnt) readv(ciptr->fd, iov, iovcnt)
-#endif /* CRAY || (SYSV && i386) || WIN32 || __sxg__ || */
+#endif /* CRAY || (SYSV && __i386__) || WIN32 || __sxg__ || */
-#if defined(CRAY) || (defined(SYSV) && defined(i386) && !defined(__SCO__) && !defined(sun)) || defined(WIN32) || defined(__sxg__) || defined(__UNIXOS2__)
+#if defined(CRAY) || (defined(SYSV) && defined(__i386__) && !defined(__SCO__) && !defined(sun)) || defined(WIN32) || defined(__sxg__) || defined(__UNIXOS2__)
#define WRITEV(ciptr, iov, iovcnt) TRANS(WriteV)(ciptr, iov, iovcnt)
diff --git a/lib/libxtrans/Xtranslcl.c b/lib/libxtrans/Xtranslcl.c
index ef846a4d3..0127d6771 100644
--- a/lib/libxtrans/Xtranslcl.c
+++ b/lib/libxtrans/Xtranslcl.c
@@ -1,4 +1,3 @@
-/* $Xorg: Xtranslcl.c,v 1.6 2001/02/09 02:04:06 xorgcvs Exp $ */
/*
Copyright 1993, 1994, 1998 The Open Group
@@ -25,10 +24,7 @@ not be used in advertising or otherwise to promote the sale, use or
other dealings in this Software without prior written authorization
from The Open Group.
-*/
-/* $XFree86: xc/lib/xtrans/Xtranslcl.c,v 3.40tsi Exp $ */
-
-/* Copyright 1993, 1994 NCR Corporation - Dayton, Ohio, USA
+ * Copyright 1993, 1994 NCR Corporation - Dayton, Ohio, USA
*
* All Rights Reserved
*
@@ -846,7 +842,7 @@ TRANS(NAMEDOpenServer)(XtransConnInfo ciptr, char *port)
NAMEDNODENAME, port);
}
} else {
- (void) sprintf(server_path, sizeof(server_path), "%s%ld",
+ (void) snprintf(server_path, sizeof(server_path), "%s%ld",
NAMEDNODENAME, (long)getpid());
}
diff --git a/lib/libxtrans/Xtranssock.c b/lib/libxtrans/Xtranssock.c
index aac43ddca..84c68b1e9 100644
--- a/lib/libxtrans/Xtranssock.c
+++ b/lib/libxtrans/Xtranssock.c
@@ -1,5 +1,3 @@
-/* $XdotOrg: lib/xtrans/Xtranssock.c,v 1.11 2005/11/08 06:33:26 jkj Exp $ */
-/* $Xorg: Xtranssock.c,v 1.11 2001/02/09 02:04:06 xorgcvs Exp $ */
/*
Copyright 1993, 1994, 1998 The Open Group
@@ -27,10 +25,7 @@ not be used in advertising or otherwise to promote the sale, use or
other dealings in this Software without prior written authorization
from the copyright holders.
-*/
-/* $XFree86: xc/lib/xtrans/Xtranssock.c,v 3.68 2004/01/07 04:28:02 dawes Exp $ */
-
-/* Copyright 1993, 1994 NCR Corporation - Dayton, Ohio, USA
+ * Copyright 1993, 1994 NCR Corporation - Dayton, Ohio, USA
*
* All Rights Reserved
*
@@ -103,11 +98,11 @@ from the copyright holders.
#include <sys/filio.h>
#endif
-#if (defined(i386) && defined(SYSV)) && !defined(SCO325) && !defined(sun)
+#if (defined(__i386__) && defined(SYSV)) && !defined(SCO325) && !defined(sun)
#include <net/errno.h>
#endif
-#if (defined(i386) && defined(SYSV)) && (!defined(ISC) || !defined(I_NREAD) || defined(SCO325)) || defined(_SEQUENT_)
+#if (defined(__i386__) && defined(SYSV)) && (!defined(ISC) || !defined(I_NREAD) || defined(SCO325)) || defined(_SEQUENT_)
#include <sys/stropts.h>
#endif
@@ -163,6 +158,10 @@ static int IBMsockInit = 0;
#define SocketInitOnce() /**/
#endif
+#ifdef linux
+#define HAVE_ABSTRACT_SOCKETS
+#endif
+
#define MIN_BACKLOG 128
#ifdef SOMAXCONN
#if SOMAXCONN > MIN_BACKLOG
@@ -172,6 +171,7 @@ static int IBMsockInit = 0;
#ifndef BACKLOG
#define BACKLOG MIN_BACKLOG
#endif
+
/*
* This is the Socket implementation of the X Transport service layer
*
@@ -281,6 +281,14 @@ static int TRANS(SocketINETClose) (XtransConnInfo ciptr);
#define MAXHOSTNAMELEN 255
#endif
+#if defined HAVE_SOCKLEN_T || (defined(IPv6) && defined(AF_INET6))
+# define SOCKLEN_T socklen_t
+#elif defined(SVR4) || defined(__SCO__)
+# define SOCKLEN_T size_t
+#else
+# define SOCKLEN_T int
+#endif
+
/*
* This provides compatibility for apps linked against system libraries
* that don't have IPv6 support.
@@ -327,11 +335,7 @@ TRANS(SocketINETGetAddr) (XtransConnInfo ciptr)
#endif
struct sockaddr_in socknamev4;
void *socknamePtr;
-#if defined(SVR4) || defined(__SCO__)
- size_t namelen;
-#else
- int namelen;
-#endif
+ SOCKLEN_T namelen;
PRMSG (3,"SocketINETGetAddr(%p)\n", ciptr, 0, 0);
@@ -404,11 +408,7 @@ TRANS(SocketINETGetPeerAddr) (XtransConnInfo ciptr)
#endif
struct sockaddr_in socknamev4;
void *socknamePtr;
-#if defined(SVR4) || defined(__SCO__)
- size_t namelen;
-#else
- int namelen;
-#endif
+ SOCKLEN_T namelen;
#if defined(IPv6) && defined(AF_INET6)
if (haveIPv6 && ciptr->family == AF_INET6)
@@ -523,18 +523,67 @@ TRANS(SocketReopen) (int i, int type, int fd, char *port)
{
XtransConnInfo ciptr;
+ int portlen;
+ struct sockaddr *addr;
PRMSG (3,"SocketReopen(%d,%d,%s)\n", type, fd, port);
+ if (port == NULL) {
+ PRMSG (1, "SocketReopen: port was null!\n", 0, 0, 0);
+ return NULL;
+ }
+
+ portlen = strlen(port) + 1; // include space for trailing null
+#ifdef SOCK_MAXADDRLEN
+ if (portlen < 0 || portlen > (SOCK_MAXADDRLEN + 2)) {
+ PRMSG (1, "SocketReopen: invalid portlen %d\n", portlen, 0, 0);
+ return NULL;
+ }
+ if (portlen < 14) portlen = 14;
+#else
+ if (portlen < 0 || portlen > 14) {
+ PRMSG (1, "SocketReopen: invalid portlen %d\n", portlen, 0, 0);
+ return NULL;
+ }
+#endif /*SOCK_MAXADDRLEN*/
+
if ((ciptr = (XtransConnInfo) xcalloc (
1, sizeof(struct _XtransConnInfo))) == NULL)
{
- PRMSG (1, "SocketReopen: malloc failed\n", 0, 0, 0);
+ PRMSG (1, "SocketReopen: malloc(ciptr) failed\n", 0, 0, 0);
return NULL;
}
ciptr->fd = fd;
+ if ((addr = (struct sockaddr *) xcalloc (1, portlen + 2)) == NULL) {
+ PRMSG (1, "SocketReopen: malloc(addr) failed\n", 0, 0, 0);
+ return NULL;
+ }
+ ciptr->addr = addr;
+ ciptr->addrlen = portlen + 2;
+
+ if ((ciptr->peeraddr = (struct sockaddr *) xcalloc (1, portlen + 2)) == NULL) {
+ PRMSG (1, "SocketReopen: malloc(portaddr) failed\n", 0, 0, 0);
+ return NULL;
+ }
+ ciptr->peeraddrlen = portlen + 2;
+
+ /* Initialize ciptr structure as if it were a normally-opened unix socket */
+ ciptr->flags = TRANS_LOCAL | TRANS_NOUNLINK;
+#ifdef BSD44SOCKETS
+ addr->sa_len = portlen + 1;
+#endif
+ addr->sa_family = AF_UNIX;
+#ifdef HAS_STRLCPY
+ strlcpy(addr->sa_data, port, portlen);
+#else
+ strncpy(addr->sa_data, port, portlen);
+#endif
+ ciptr->family = AF_UNIX;
+ memcpy(ciptr->peeraddr, ciptr->addr, sizeof(struct sockaddr));
+ ciptr->port = rindex(addr->sa_data, ':');
+ if (ciptr->port[0] == ':') ciptr->port++; /* port should now point to portnum or NULL */
return ciptr;
}
@@ -829,23 +878,28 @@ TRANS(SocketSetOption) (XtransConnInfo ciptr, int option, int arg)
#ifdef UNIXCONN
static int
-set_sun_path(const char *port, const char *upath, char *path)
+set_sun_path(const char *port, const char *upath, char *path, int abstract)
{
struct sockaddr_un s;
int maxlen = sizeof(s.sun_path) - 1;
+ const char *at = "";
if (!port || !*port || !path)
return -1;
- if (*port == '/') { /* a full pathname */
- if (strlen(port) > maxlen)
- return -1;
- snprintf(path, maxlen+1, "%s", port);
- } else {
- if (strlen(port) + strlen(upath) > maxlen)
- return -1;
- snprintf(path, maxlen+1, "%s%s", upath, port);
- }
+#ifdef HAVE_ABSTRACT_SOCKETS
+ if (port[0] == '@')
+ upath = "";
+ else if (abstract)
+ at = "@";
+#endif
+
+ if (*port == '/') /* a full pathname */
+ upath = "";
+
+ if (strlen(port) + strlen(upath) > maxlen)
+ return -1;
+ snprintf(path, maxlen+1, "%s%s%s", at, upath, port);
return 0;
}
#endif
@@ -858,7 +912,7 @@ TRANS(SocketCreateListener) (XtransConnInfo ciptr,
int socknamelen, unsigned int flags)
{
- int namelen = socknamelen;
+ SOCKLEN_T namelen = socknamelen;
int fd = ciptr->fd;
int retry;
@@ -938,7 +992,7 @@ TRANS(SocketINETCreateListener) (XtransConnInfo ciptr, char *port, unsigned int
struct sockaddr_in sockname;
#endif
unsigned short sport;
- int namelen = sizeof(sockname);
+ SOCKLEN_T namelen = sizeof(sockname);
int status;
long tmpport;
#ifdef XTHREADS_NEEDS_BYNAMEPARAMS
@@ -1068,6 +1122,12 @@ TRANS(SocketUNIXCreateListener) (XtransConnInfo ciptr, char *port,
int oldUmask;
int status;
unsigned int mode;
+ char tmpport[108];
+
+ int abstract = 0;
+#ifdef HAVE_ABSTRACT_SOCKETS
+ abstract = ciptr->transptr->flags & TRANS_ABSTRACT;
+#endif
PRMSG (2, "SocketUNIXCreateListener(%s)\n",
port ? port : "NULL", 0, 0);
@@ -1090,16 +1150,16 @@ TRANS(SocketUNIXCreateListener) (XtransConnInfo ciptr, char *port,
}
#endif
+ memset(&sockname, 0, sizeof(sockname));
sockname.sun_family = AF_UNIX;
- if (port && *port) {
- if (set_sun_path(port, UNIX_PATH, sockname.sun_path) != 0) {
- PRMSG (1, "SocketUNIXCreateListener: path too long\n", 0, 0, 0);
- return TRANS_CREATE_LISTENER_FAILED;
- }
- } else {
- snprintf (sockname.sun_path, sizeof(sockname.sun_path),
- "%s%ld", UNIX_PATH, (long)getpid());
+ if (!(port && *port)) {
+ snprintf (tmpport, sizeof(tmpport), "%s%ld", UNIX_PATH, (long)getpid());
+ port = tmpport;
+ }
+ if (set_sun_path(port, UNIX_PATH, sockname.sun_path, abstract) != 0) {
+ PRMSG (1, "SocketUNIXCreateListener: path too long\n", 0, 0, 0);
+ return TRANS_CREATE_LISTENER_FAILED;
}
#if (defined(BSD44SOCKETS) || defined(__UNIXWARE__)) && !defined(Lynx)
@@ -1112,7 +1172,12 @@ TRANS(SocketUNIXCreateListener) (XtransConnInfo ciptr, char *port,
namelen = strlen(sockname.sun_path) + offsetof(struct sockaddr_un, sun_path);
#endif
- unlink (sockname.sun_path);
+ if (abstract) {
+ sockname.sun_path[0] = '\0';
+ namelen = offsetof(struct sockaddr_un, sun_path) + 1 + strlen(&sockname.sun_path[1]);
+ }
+ else
+ unlink (sockname.sun_path);
if ((status = TRANS(SocketCreateListener) (ciptr,
(struct sockaddr *) &sockname, namelen, flags)) < 0)
@@ -1142,6 +1207,9 @@ TRANS(SocketUNIXCreateListener) (XtransConnInfo ciptr, char *port,
return TRANS_CREATE_LISTENER_FAILED;
}
+ if (abstract)
+ sockname.sun_path[0] = '@';
+
ciptr->family = sockname.sun_family;
ciptr->addrlen = namelen;
memcpy (ciptr->addr, &sockname, ciptr->addrlen);
@@ -1164,16 +1232,22 @@ TRANS(SocketUNIXResetListener) (XtransConnInfo ciptr)
struct stat statb;
int status = TRANS_RESET_NOOP;
unsigned int mode;
+ int abstract = 0;
+#ifdef HAVE_ABSTRACT_SOCKETS
+ abstract = ciptr->transptr->flags & TRANS_ABSTRACT;
+#endif
PRMSG (3, "SocketUNIXResetListener(%p,%d)\n", ciptr, ciptr->fd, 0);
- if (stat (unsock->sun_path, &statb) == -1 ||
+ if (!abstract && (
+ stat (unsock->sun_path, &statb) == -1 ||
((statb.st_mode & S_IFMT) !=
#if (defined (sun) && defined(SVR4)) || defined(NCR) || defined(SCO325) || !defined(S_IFSOCK)
- S_IFIFO))
+ S_IFIFO
#else
- S_IFSOCK))
+ S_IFSOCK
#endif
+ )))
{
int oldUmask = umask (0);
@@ -1235,7 +1309,7 @@ TRANS(SocketINETAccept) (XtransConnInfo ciptr, int *status)
{
XtransConnInfo newciptr;
struct sockaddr_in sockname;
- int namelen = sizeof(sockname);
+ SOCKLEN_T namelen = sizeof(sockname);
PRMSG (2, "SocketINETAccept(%p,%d)\n", ciptr, ciptr->fd, 0);
@@ -1314,11 +1388,7 @@ TRANS(SocketUNIXAccept) (XtransConnInfo ciptr, int *status)
{
XtransConnInfo newciptr;
struct sockaddr_un sockname;
-#if defined(SVR4) || defined(__SCO__)
- size_t namelen = sizeof sockname;
-#else
- int namelen = sizeof sockname;
-#endif
+ SOCKLEN_T namelen = sizeof sockname;
PRMSG (2, "SocketUNIXAccept(%p,%d)\n", ciptr, ciptr->fd, 0);
@@ -1339,6 +1409,7 @@ TRANS(SocketUNIXAccept) (XtransConnInfo ciptr, int *status)
return NULL;
}
+ ciptr->addrlen = namelen;
/*
* Get the socket name and the peer name from the listener socket,
* since this is unix domain.
@@ -1355,6 +1426,10 @@ TRANS(SocketUNIXAccept) (XtransConnInfo ciptr, int *status)
return NULL;
}
+ /*
+ * if the socket is abstract, we already modified the address to have a
+ * @ instead of the initial NUL, so no need to do that again here.
+ */
newciptr->addrlen = ciptr->addrlen;
memcpy (newciptr->addr, ciptr->addr, newciptr->addrlen);
@@ -1941,13 +2016,17 @@ TRANS(SocketUNIXConnect) (XtransConnInfo ciptr, char *host, char *port)
{
struct sockaddr_un sockname;
- int namelen;
+ SOCKLEN_T namelen;
#if defined(hpux) && defined(X11_t)
struct sockaddr_un old_sockname;
- int old_namelen;
+ SOCKLEN_T old_namelen;
#endif
+ int abstract = 0;
+#ifdef HAVE_ABSTRACT_SOCKETS
+ abstract = ciptr->transptr->flags & TRANS_ABSTRACT;
+#endif
PRMSG (2,"SocketUNIXConnect(%d,%s,%s)\n", ciptr->fd, host, port);
@@ -1959,7 +2038,7 @@ TRANS(SocketUNIXConnect) (XtransConnInfo ciptr, char *host, char *port)
* we know for sure it will fail.
*/
- if (strcmp (host, "unix") != 0 && !UnixHostReallyLocal (host))
+ if (host && *host && host[0]!='/' && strcmp (host, "unix") != 0 && !UnixHostReallyLocal (host))
{
PRMSG (1,
"SocketUNIXConnect: Cannot connect to non-local host %s\n",
@@ -1985,7 +2064,7 @@ TRANS(SocketUNIXConnect) (XtransConnInfo ciptr, char *host, char *port)
sockname.sun_family = AF_UNIX;
- if (set_sun_path(port, UNIX_PATH, sockname.sun_path) != 0) {
+ if (set_sun_path(port, UNIX_PATH, sockname.sun_path, abstract) != 0) {
PRMSG (1, "SocketUNIXConnect: path too long\n", 0, 0, 0);
return TRANS_CONNECT_FAILED;
}
@@ -2006,7 +2085,7 @@ TRANS(SocketUNIXConnect) (XtransConnInfo ciptr, char *host, char *port)
* This is gross, but it was in Xlib
*/
old_sockname.sun_family = AF_UNIX;
- if (set_sun_path(port, OLD_UNIX_PATH, old_sockname.sun_path) != 0) {
+ if (set_sun_path(port, OLD_UNIX_PATH, old_sockname.sun_path, abstract) != 0) {
PRMSG (1, "SocketUNIXConnect: path too long\n", 0, 0, 0);
return TRANS_CONNECT_FAILED;
}
@@ -2014,6 +2093,17 @@ TRANS(SocketUNIXConnect) (XtransConnInfo ciptr, char *host, char *port)
offsetof(struct sockaddr_un, sun_path);
#endif
+ /*
+ * Adjust the socket path if using abstract sockets.
+ * Done here because otherwise all the strlen() calls above would fail.
+ */
+
+ if (abstract) {
+ sockname.sun_path[0] = '\0';
+#if defined(hpux) && defined(X11_t)
+ old_sockname.sun_path[0] = '\0';
+#endif
+ }
/*
* Do the connect()
@@ -2041,8 +2131,13 @@ TRANS(SocketUNIXConnect) (XtransConnInfo ciptr, char *host, char *port)
errno = olderrno;
/*
- * If the error was ENOENT, the server may be starting up
- * and we should try again.
+ * If the error was ENOENT, the server may be starting up; we used
+ * to suggest to try again in this case with
+ * TRANS_TRY_CONNECT_AGAIN, but this introduced problems for
+ * processes still referencing stale sockets in their environment.
+ * Hence, we now return a hard error, TRANS_CONNECT_FAILED, and it
+ * is suggested that higher level stacks handle retries on their
+ * level when they face a slow starting server.
*
* If the error was EWOULDBLOCK or EINPROGRESS then the socket
* was non-blocking and we should poll using select
@@ -2051,12 +2146,19 @@ TRANS(SocketUNIXConnect) (XtransConnInfo ciptr, char *host, char *port)
* should try again.
*/
- if (olderrno == ENOENT || olderrno == EINTR)
- return TRANS_TRY_CONNECT_AGAIN;
- else if (olderrno == EWOULDBLOCK || olderrno == EINPROGRESS)
+ if (olderrno == EWOULDBLOCK || olderrno == EINPROGRESS)
return TRANS_IN_PROGRESS;
- else
- {
+ else if (olderrno == EINTR)
+ return TRANS_TRY_CONNECT_AGAIN;
+ else if (olderrno == ENOENT) {
+ /* If opening as abstract socket failed, try again normally */
+ if (abstract) {
+ ciptr->transptr->flags &= ~(TRANS_ABSTRACT);
+ return TRANS_TRY_CONNECT_AGAIN;
+ } else {
+ return TRANS_CONNECT_FAILED;
+ }
+ } else {
PRMSG (2,"SocketUNIXConnect: Can't connect: errno = %d\n",
EGET(),0, 0);
@@ -2079,12 +2181,15 @@ TRANS(SocketUNIXConnect) (XtransConnInfo ciptr, char *host, char *port)
return TRANS_CONNECT_FAILED;
}
+ if (abstract)
+ sockname.sun_path[0] = '@';
+
ciptr->family = AF_UNIX;
ciptr->addrlen = namelen;
ciptr->peeraddrlen = namelen;
memcpy (ciptr->addr, &sockname, ciptr->addrlen);
memcpy (ciptr->peeraddr, &sockname, ciptr->peeraddrlen);
-
+
return 0;
}
@@ -2105,11 +2210,11 @@ TRANS(SocketBytesReadable) (XtransConnInfo ciptr, BytesReadable_t *pend)
#ifdef WIN32
{
int ret = ioctlsocket ((SOCKET) ciptr->fd, FIONREAD, (u_long *) pend);
- errno = WSAGetLastError();
+ if (ret == SOCKET_ERROR) errno = WSAGetLastError();
return ret;
}
#else
-#if (defined(i386) && defined(SYSV) && !defined(SCO325)) || (defined(_SEQUENT_) && _SOCKET_VERSION == 1)
+#if (defined(__i386__) && defined(SYSV) && !defined(SCO325)) || (defined(_SEQUENT_) && _SOCKET_VERSION == 1)
return ioctl (ciptr->fd, I_NREAD, (char *) pend);
#else
#if defined(__UNIXOS2__)
@@ -2117,7 +2222,7 @@ TRANS(SocketBytesReadable) (XtransConnInfo ciptr, BytesReadable_t *pend)
#else
return ioctl (ciptr->fd, FIONREAD, (char *) pend);
#endif /* __UNIXOS2__ */
-#endif /* i386 && SYSV || _SEQUENT_ && _SOCKET_VERSION == 1 */
+#endif /* __i386__ && SYSV || _SEQUENT_ && _SOCKET_VERSION == 1 */
#endif /* WIN32 */
}
@@ -2132,7 +2237,7 @@ TRANS(SocketRead) (XtransConnInfo ciptr, char *buf, int size)
{
int ret = recv ((SOCKET)ciptr->fd, buf, size, 0);
#ifdef WIN32
- errno = WSAGetLastError();
+ if (ret == SOCKET_ERROR) errno = WSAGetLastError();
#endif
return ret;
}
@@ -2152,7 +2257,7 @@ TRANS(SocketWrite) (XtransConnInfo ciptr, char *buf, int size)
{
int ret = send ((SOCKET)ciptr->fd, buf, size, 0);
#ifdef WIN32
- errno = WSAGetLastError();
+ if (ret == SOCKET_ERROR) errno = WSAGetLastError();
#endif
return ret;
}
@@ -2191,7 +2296,7 @@ TRANS(SocketDisconnect) (XtransConnInfo ciptr)
#ifdef WIN32
{
int ret = shutdown (ciptr->fd, 2);
- errno = WSAGetLastError();
+ if (ret == SOCKET_ERROR) errno = WSAGetLastError();
return ret;
}
#else
@@ -2210,7 +2315,7 @@ TRANS(SocketINETClose) (XtransConnInfo ciptr)
#ifdef WIN32
{
int ret = close (ciptr->fd);
- errno = WSAGetLastError();
+ if (ret == SOCKET_ERROR) errno = WSAGetLastError();
return ret;
}
#else
@@ -2224,7 +2329,6 @@ TRANS(SocketINETClose) (XtransConnInfo ciptr)
#ifdef UNIXCONN
static int
TRANS(SocketUNIXClose) (XtransConnInfo ciptr)
-
{
/*
* If this is the server side, then once the socket is closed,
@@ -2243,7 +2347,8 @@ TRANS(SocketUNIXClose) (XtransConnInfo ciptr)
&& sockname->sun_family == AF_UNIX
&& sockname->sun_path[0])
{
- if (!(ciptr->flags & TRANS_NOUNLINK))
+ if (!(ciptr->flags & TRANS_NOUNLINK
+ || ciptr->transptr->flags & TRANS_ABSTRACT))
unlink (sockname->sun_path);
}
@@ -2410,7 +2515,11 @@ Xtransport TRANS(SocketINET6Funcs) = {
Xtransport TRANS(SocketLocalFuncs) = {
/* Socket Interface */
"local",
+#ifdef HAVE_ABSTRACT_SOCKETS
+ TRANS_ABSTRACT,
+#else
0,
+#endif
#ifdef TRANS_CLIENT
TRANS(SocketOpenCOTSClient),
#endif /* TRANS_CLIENT */
@@ -2456,7 +2565,7 @@ static char* unix_nolisten[] = { "local" , NULL };
Xtransport TRANS(SocketUNIXFuncs) = {
/* Socket Interface */
"unix",
-#if !defined(LOCALCONN)
+#if !defined(LOCALCONN) && !defined(HAVE_ABSTRACT_SOCKETS)
TRANS_ALIAS,
#else
0,
diff --git a/lib/libxtrans/Xtranstli.c b/lib/libxtrans/Xtranstli.c
index d8b5db83b..a9dfc21da 100644
--- a/lib/libxtrans/Xtranstli.c
+++ b/lib/libxtrans/Xtranstli.c
@@ -1,4 +1,3 @@
-/* $Xorg: Xtranstli.c,v 1.4 2001/02/09 02:04:07 xorgcvs Exp $ */
/*
Copyright 1993, 1994, 1998 The Open Group
@@ -25,10 +24,7 @@ not be used in advertising or otherwise to promote the sale, use or
other dealings in this Software without prior written authorization
from The Open Group.
-*/
-/* $XFree86: xc/lib/xtrans/Xtranstli.c,v 3.12tsi Exp $ */
-
-/* Copyright 1993, 1994 NCR Corporation - Dayton, Ohio, USA
+ * Copyright 1993, 1994 NCR Corporation - Dayton, Ohio, USA
*
* All Rights Reserved
*
diff --git a/lib/libxtrans/Xtransutil.c b/lib/libxtrans/Xtransutil.c
index cd090f70c..287c3f244 100644
--- a/lib/libxtrans/Xtransutil.c
+++ b/lib/libxtrans/Xtransutil.c
@@ -1,4 +1,3 @@
-/* $Xorg: Xtransutil.c,v 1.4 2001/02/09 02:04:07 xorgcvs Exp $ */
/*
Copyright 1993, 1994, 1998 The Open Group
@@ -25,10 +24,7 @@ not be used in advertising or otherwise to promote the sale, use or
other dealings in this Software without prior written authorization
from The Open Group.
-*/
-/* $XFree86: xc/lib/xtrans/Xtransutil.c,v 3.26 2003/07/09 15:27:30 tsi Exp $ */
-
-/* Copyright 1993, 1994 NCR Corporation - Dayton, Ohio, USA
+ * Copyright 1993, 1994 NCR Corporation - Dayton, Ohio, USA
*
* All Rights Reserved
*
@@ -61,6 +57,10 @@ from The Open Group.
#ifdef XTHREADS
#include <X11/Xthreads.h>
#endif
+#ifdef WIN32
+#include <X11/Xlibint.h>
+#include <X11/Xwinsock.h>
+#endif
#ifdef X11_t
@@ -487,7 +487,7 @@ TRANS(WSAStartup) (void)
PRMSG (2,"WSAStartup()\n", 0, 0, 0);
- if (!wsadata.wVersion && WSAStartup(0x0101, &wsadata))
+ if (!wsadata.wVersion && WSAStartup(MAKEWORD(2,2), &wsadata))
return 1;
return 0;
}
@@ -664,8 +664,10 @@ trans_mkdir(char *path, int mode)
return -1;
}
#endif
+#ifndef __APPLE_CC__
PRMSG(1, "mkdir: Owner of %s should be set to root\n",
path, 0, 0);
+#endif
}
if (updateMode && !updatedMode) {
diff --git a/lib/libxtrans/aclocal.m4 b/lib/libxtrans/aclocal.m4
index 9b1de4fc2..825cc938f 100644
--- a/lib/libxtrans/aclocal.m4
+++ b/lib/libxtrans/aclocal.m4
@@ -871,14 +871,14 @@ AC_DEFUN([XORG_RELEASE_VERSION],[
AC_DEFINE_UNQUOTED([PACKAGE_VERSION_MAJOR],
[`echo $PACKAGE_VERSION | cut -d . -f 1`],
[Major version of this package])
- PVM=`echo $PACKAGE_VERSION | cut -d . -f 2`
+ PVM=`echo $PACKAGE_VERSION | cut -d . -f 2 | cut -d - -f 1`
if test "x$PVM" = "x"; then
PVM="0"
fi
AC_DEFINE_UNQUOTED([PACKAGE_VERSION_MINOR],
[$PVM],
[Minor version of this package])
- PVP=`echo $PACKAGE_VERSION | cut -d . -f 3`
+ PVP=`echo $PACKAGE_VERSION | cut -d . -f 3 | cut -d - -f 1`
if test "x$PVP" = "x"; then
PVP="0"
fi
diff --git a/lib/libxtrans/configure b/lib/libxtrans/configure
index 56aea7e04..e35b5b591 100644
--- a/lib/libxtrans/configure
+++ b/lib/libxtrans/configure
@@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.59 for xtrans 1.0.4.
+# Generated by GNU Autoconf 2.59 for xtrans 1.2.
#
# Report bugs to <https://bugs.freedesktop.org/enter_bug.cgi?product=xorg>.
#
@@ -269,8 +269,8 @@ SHELL=${CONFIG_SHELL-/bin/sh}
# Identity of this package.
PACKAGE_NAME='xtrans'
PACKAGE_TARNAME='xtrans'
-PACKAGE_VERSION='1.0.4'
-PACKAGE_STRING='xtrans 1.0.4'
+PACKAGE_VERSION='1.2'
+PACKAGE_STRING='xtrans 1.2'
PACKAGE_BUGREPORT='https://bugs.freedesktop.org/enter_bug.cgi?product=xorg'
ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot AMTAR am__tar am__untar MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE fchown_define sticky_bit_define LIBOBJS LTLIBOBJS'
@@ -738,7 +738,7 @@ if test "$ac_init_help" = "long"; then
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
-\`configure' configures xtrans 1.0.4 to adapt to many kinds of systems.
+\`configure' configures xtrans 1.2 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -800,7 +800,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of xtrans 1.0.4:";;
+ short | recursive ) echo "Configuration of xtrans 1.2:";;
esac
cat <<\_ACEOF
@@ -925,7 +925,7 @@ fi
test -n "$ac_init_help" && exit 0
if $ac_init_version; then
cat <<\_ACEOF
-xtrans configure 1.0.4
+xtrans configure 1.2
generated by GNU Autoconf 2.59
Copyright (C) 2003 Free Software Foundation, Inc.
@@ -939,7 +939,7 @@ cat >&5 <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
-It was created by xtrans $as_me 1.0.4, which was
+It was created by xtrans $as_me 1.2, which was
generated by GNU Autoconf 2.59. Invocation command line was
$ $0 $@
@@ -1537,7 +1537,7 @@ fi
# Define the identity of the package.
PACKAGE='xtrans'
- VERSION='1.0.4'
+ VERSION='1.2'
cat >>confdefs.h <<_ACEOF
@@ -2930,7 +2930,7 @@ cat >>confdefs.h <<_ACEOF
#define PACKAGE_VERSION_MAJOR `echo $PACKAGE_VERSION | cut -d . -f 1`
_ACEOF
- PVM=`echo $PACKAGE_VERSION | cut -d . -f 2`
+ PVM=`echo $PACKAGE_VERSION | cut -d . -f 2 | cut -d - -f 1`
if test "x$PVM" = "x"; then
PVM="0"
fi
@@ -2939,7 +2939,7 @@ cat >>confdefs.h <<_ACEOF
#define PACKAGE_VERSION_MINOR $PVM
_ACEOF
- PVP=`echo $PACKAGE_VERSION | cut -d . -f 3`
+ PVP=`echo $PACKAGE_VERSION | cut -d . -f 3 | cut -d - -f 1`
if test "x$PVP" = "x"; then
PVP="0"
fi
@@ -3365,7 +3365,7 @@ _ASBOX
} >&5
cat >&5 <<_CSEOF
-This file was extended by xtrans $as_me 1.0.4, which was
+This file was extended by xtrans $as_me 1.2, which was
generated by GNU Autoconf 2.59. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -3423,7 +3423,7 @@ _ACEOF
cat >>$CONFIG_STATUS <<_ACEOF
ac_cs_version="\\
-xtrans config.status 1.0.4
+xtrans config.status 1.2
configured by $0, generated by GNU Autoconf 2.59,
with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\"
diff --git a/lib/libxtrans/configure.ac b/lib/libxtrans/configure.ac
index bb9d4bc46..304fd6bc6 100644
--- a/lib/libxtrans/configure.ac
+++ b/lib/libxtrans/configure.ac
@@ -1,6 +1,3 @@
-dnl
-dnl $Id: configure.ac,v 1.1 2006/11/25 18:26:23 matthieu Exp $
-dnl
dnl Copyright © 2003 Keith Packard, Noah Levitt
dnl
dnl Permission to use, copy, modify, distribute, and sell this software and its
@@ -24,7 +21,7 @@ dnl
dnl Process this file with autoconf to create configure.
AC_PREREQ([2.57])
-AC_INIT(xtrans, 1.0.2, [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], xtrans)
+AC_INIT(xtrans, 1.2, [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], xtrans)
AM_INIT_AUTOMAKE([dist-bzip2])
AM_MAINTAINER_MODE
diff --git a/lib/libxtrans/transport.c b/lib/libxtrans/transport.c
index ff460c257..0d1eaf95b 100644
--- a/lib/libxtrans/transport.c
+++ b/lib/libxtrans/transport.c
@@ -1,4 +1,3 @@
-/* $Xorg: transport.c,v 1.4 2001/02/09 02:04:07 xorgcvs Exp $ */
/*
Copyright 1993, 1994, 1998 The Open Group
@@ -25,10 +24,7 @@ not be used in advertising or otherwise to promote the sale, use or
other dealings in this Software without prior written authorization
from The Open Group.
-*/
-/* $XFree86: xc/lib/xtrans/transport.c,v 3.9 2002/05/31 18:45:51 dawes Exp $ */
-
-/* Copyright 1993, 1994 NCR Corporation - Dayton, Ohio, USA
+ * Copyright 1993, 1994 NCR Corporation - Dayton, Ohio, USA
*
* All Rights Reserved
*
diff --git a/lib/libxtrans/xtrans.m4 b/lib/libxtrans/xtrans.m4
index 1d80595ad..31d456b41 100644
--- a/lib/libxtrans/xtrans.m4
+++ b/lib/libxtrans/xtrans.m4
@@ -52,6 +52,12 @@ AC_DEFUN([XTRANS_TCP_FLAGS],[
#include <sys/socket.h>
#include <netinet/in.h>
])
+
+ # POSIX.1g changed the type of pointer passed to getsockname/getpeername/etc.
+ AC_CHECK_TYPES([socklen_t], [], [], [
+AC_INCLUDES_DEFAULT
+#include <sys/socket.h>])
+
]) # XTRANS_TCP_FLAGS
# XTRANS_CONNECTION_FLAGS()
@@ -61,17 +67,21 @@ AC_DEFUN([XTRANS_TCP_FLAGS],[
AC_DEFUN([XTRANS_CONNECTION_FLAGS],[
AC_REQUIRE([AC_CANONICAL_HOST])
AC_REQUIRE([AC_TYPE_SIGNAL])
+ [case $host_os in
+ mingw*) unixdef="no" ;;
+ *) unixdef="yes" ;;
+ esac]
AC_ARG_ENABLE(unix-transport,
AC_HELP_STRING([--enable-unix-transport],[Enable UNIX domain socket transport]),
- [UNIXCONN=$enableval], [UNIXCONN=yes])
- AC_ARG_ENABLE(tcp-transport,
- AC_HELP_STRING([--enable-tcp-transport],[Enable TCP socket transport]),
- [TCPCONN=$enableval], [TCPCONN=yes])
+ [UNIXCONN=$enableval], [UNIXCONN=$unixdef])
AC_MSG_CHECKING([if Xtrans should support UNIX socket connections])
if test "$UNIXCONN" = "yes"; then
AC_DEFINE(UNIXCONN,1,[Support UNIX socket connections])
fi
AC_MSG_RESULT($UNIXCONN)
+ AC_ARG_ENABLE(tcp-transport,
+ AC_HELP_STRING([--enable-tcp-transport],[Enable TCP socket transport]),
+ [TCPCONN=$enableval], [TCPCONN=yes])
AC_MSG_CHECKING([if Xtrans should support TCP socket connections])
AC_MSG_RESULT($TCPCONN)
if test "$TCPCONN" = "yes"; then