summaryrefslogtreecommitdiff
path: root/src/LiHosts.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/LiHosts.c')
-rw-r--r--src/LiHosts.c95
1 files changed, 66 insertions, 29 deletions
diff --git a/src/LiHosts.c b/src/LiHosts.c
index 2f22d71d..406c8550 100644
--- a/src/LiHosts.c
+++ b/src/LiHosts.c
@@ -1,27 +1,38 @@
/* $Xorg: LiHosts.c,v 1.4 2001/02/09 02:03:34 xorgcvs Exp $ */
+/* $XdotOrg: lib/X11/src/LiHosts.c,v 1.2 2004-04-23 18:43:24 eich Exp $ */
/*
Copyright 1986, 1998 The Open Group
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation.
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall 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.
+Copyright 2004 Sun Microsystems, Inc.
+
+All rights reserved.
+
+Permission is hereby granted, free of charge, to any person obtaining a
+copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, and/or sell copies of the Software, and to permit persons
+to whom the Software is furnished to do so, provided that the above
+copyright notice(s) and this permission notice appear in all copies of
+the Software and that both the above copyright notice(s) and this
+permission notice appear in supporting documentation.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
+OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL
+INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING
+FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
+NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
+WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+Except as contained in this notice, the name of a copyright holder
+shall not be used in advertising or otherwise to promote the sale, use
+or other dealings in this Software without prior written authorization
+of the copyright holder.
+
+X Window System is a trademark of The Open Group.
*/
@@ -33,17 +44,18 @@ in this Software without prior written authorization from The Open Group.
* can be freed using XFree.
*/
-XHostAddress *XListHosts (dpy, nhosts, enabled)
- register Display *dpy;
- int *nhosts; /* RETURN */
- Bool *enabled; /* RETURN */
- {
+XHostAddress *XListHosts (
+ register Display *dpy,
+ int *nhosts, /* RETURN */
+ Bool *enabled) /* RETURN */
+{
register XHostAddress *outbuf = 0, *op;
xListHostsReply reply;
long nbytes;
unsigned char *buf, *bp;
register unsigned i;
register xListHostsReq *req;
+ XServerInterpretedAddress *sip;
*nhosts = 0;
LockDisplay(dpy);
@@ -56,9 +68,15 @@ XHostAddress *XListHosts (dpy, nhosts, enabled)
}
if (reply.nHosts) {
+ unsigned int l;
nbytes = reply.length << 2; /* compute number of bytes in reply */
+ l = (unsigned) (nbytes +
+ (reply.nHosts * sizeof(XHostAddress)) +
+ (reply.nHosts * sizeof(XServerInterpretedAddress)));
op = outbuf = (XHostAddress *)
- Xmalloc((unsigned) (nbytes + reply.nHosts * sizeof(XHostAddress)));
+ Xmalloc((unsigned) (nbytes +
+ (reply.nHosts * sizeof(XHostAddress)) +
+ (reply.nHosts * sizeof(XServerInterpretedAddress))));
if (! outbuf) {
_XEatData(dpy, (unsigned long) nbytes);
@@ -66,8 +84,10 @@ XHostAddress *XListHosts (dpy, nhosts, enabled)
SyncHandle();
return (XHostAddress *) NULL;
}
- bp = buf =
- ((unsigned char *) outbuf) + reply.nHosts * sizeof(XHostAddress);
+ sip = (XServerInterpretedAddress *)
+ (((unsigned char *) outbuf) + (reply.nHosts * sizeof(XHostAddress)));
+ bp = buf = ((unsigned char *) sip)
+ + (reply.nHosts * sizeof(XServerInterpretedAddress));
_XRead (dpy, (char *) buf, nbytes);
@@ -81,7 +101,24 @@ XHostAddress *XListHosts (dpy, nhosts, enabled)
op->family = ((xHostEntry *) bp)->family;
op->length =((xHostEntry *) bp)->length;
#endif
- op->address = (char *) (bp + SIZEOF(xHostEntry));
+ if (op->family == FamilyServerInterpreted) {
+ char *tp = (char *) (bp + SIZEOF(xHostEntry));
+ char *vp = memchr(tp, 0, op->length);
+
+ if (vp != NULL) {
+ sip->type = tp;
+ sip->typelength = vp - tp;
+ sip->value = vp + 1;
+ sip->valuelength = op->length - (sip->typelength + 1);
+ } else {
+ sip->type = sip->value = NULL;
+ sip->typelength = sip->valuelength = 0;
+ }
+ op->address = (char *) sip;
+ sip++;
+ } else {
+ op->address = (char *) (bp + SIZEOF(xHostEntry));
+ }
bp += SIZEOF(xHostEntry) + (((op->length + 3) >> 2) << 2);
op++;
}