From 6ea8e6a225316bbba32c4761aff934e69112c963 Mon Sep 17 00:00:00 2001 From: Kaleb Keithley Date: Wed, 26 Nov 2003 22:49:12 +0000 Subject: merge latest (4.3.99.16) from XFree86 (vendor) branch --- xrdb.c | 29 +++++++++++++++++++++-------- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/xrdb.c b/xrdb.c index fd2707f..0f74c8a 100644 --- 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 @@ -52,6 +52,10 @@ #include #include +#if defined(sun) && defined(SVR4) +#include /* 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")) -- cgit v1.2.3