XFree86 4.3.99.16 Bring the tree up to date for the Cygwin folks xf86-012804-2330 xf86-4_3_99_16 xf86-4_3_99_901 xf86-4_3_99_902 xf86-4_3_99_903_special
authorKaleb Keithley <kaleb@freedesktop.org>
Tue, 25 Nov 2003 19:29:15 +0000 (19:29 +0000)
committerKaleb Keithley <kaleb@freedesktop.org>
Tue, 25 Nov 2003 19:29:15 +0000 (19:29 +0000)
xrdb.c

diff --git a/xrdb.c b/xrdb.c
index fd2707f..0f74c8a 100644 (file)
--- a/xrdb.c
+++ b/xrdb.c
@@ -30,7 +30,7 @@
  * used in advertising or publicity pertaining to distribution of the software
  * without specific, written prior permission.
  */
-/* $XFree86: xc/programs/xrdb/xrdb.c,v 3.16 2002/05/31 18:46:14 dawes Exp $ */
+/* $XFree86: xc/programs/xrdb/xrdb.c,v 3.17 2003/07/20 16:12:20 tsi Exp $ */
 
 /*
  * this program is used to load, or dump the resource manager database
 #include <stdlib.h>
 #include <stdarg.h>
 
+#if defined(sun) && defined(SVR4)
+#include <netdb.h> /* MAXHOSTNAMELEN */
+#endif
+
 #define SCREEN_RESOURCES "SCREEN_RESOURCES"
 
 #ifndef CPP
@@ -498,19 +502,28 @@ Resolution(int pixels, int mm)
 static void
 DoDisplayDefines(Display *display, String *defs, char *host)
 {
-#define MAXHOSTNAME 255
-    char client[MAXHOSTNAME], server[MAXHOSTNAME], *colon;
+#ifndef MAXHOSTNAMELEN
+#define MAXHOSTNAMELEN 255
+#endif
+    char client[MAXHOSTNAMELEN], server[MAXHOSTNAMELEN], *colon;
     char **extnames;
     int n;
     
-    XmuGetHostname(client, MAXHOSTNAME);
-    strcpy(server, XDisplayName(host));
-    colon = strchr(server, ':');
+    XmuGetHostname(client, MAXHOSTNAMELEN);
+    strncpy(server, XDisplayName(host), sizeof(server));
+    server[sizeof(server) - 1] = '\0';
+    /* search for final colon to skip over any embedded colons in IPv6
+       numeric address forms */
+    colon = strrchr(server, ':');
     n = 0;
     if (colon) {
+       /* remove extra colon if there are exactly two, since it indicates 
+          DECnet.  Three colons is an IPv6 address ending in :: though. */
+       if ((colon > server) && (*(colon-1) == ':') &&
+         ( ((colon - 1) == server) || (*(colon-2) != ':') ) ) {
+           *(colon-1) = ':';
+       }
        *colon++ = '\0';
-       if (*colon == ':')
-           colon++;
        sscanf(colon, "%d", &n);
     }
     if (!*server || !strcmp(server, "unix") || !strcmp(server, "localhost"))