diff options
Diffstat (limited to 'src/Host.c')
-rw-r--r-- | src/Host.c | 129 |
1 files changed, 88 insertions, 41 deletions
@@ -1,78 +1,125 @@ /* $Xorg: Host.c,v 1.4 2001/02/09 02:03:33 xorgcvs Exp $ */ +/* $XdotOrg: lib/X11/src/Host.c,v 1.1.4.3 2004-04-15 10:14:54 eich Exp $ */ /* Copyright 1986, 1998 The Open Group +Copyright 2004 Sun Microsystems, Inc. -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. +All rights reserved. -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. +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. 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. +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 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. +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. */ /* $XFree86: xc/lib/X11/Host.c,v 1.3 2001/01/17 19:41:37 dawes Exp $ */ -/* this might be rightly reguarded an os dependent file */ +/* this might be rightly regarded an os dependent file */ #include "Xlibint.h" int -XAddHost (dpy, host) - register Display *dpy; - XHostAddress *host; - { +XAddHost ( + register Display *dpy, + XHostAddress *host) +{ register xChangeHostsReq *req; - register int length = (host->length + 3) & ~0x3; /* round up */ + register int length; + XServerInterpretedAddress *siAddr; + int addrlen; + + if (host->family == FamilyServerInterpreted) { + siAddr = (XServerInterpretedAddress *) host->address; + addrlen = siAddr->typelength + siAddr->valuelength + 1; + } else { + addrlen = host->length; + } + + length = (addrlen + 3) & ~0x3; /* round up */ LockDisplay(dpy); GetReqExtra (ChangeHosts, length, req); req->mode = HostInsert; req->hostFamily = host->family; - req->hostLength = host->length; - memcpy((char *) NEXTPTR(req,xChangeHostsReq), host->address, host->length); + req->hostLength = addrlen; + if (host->family == FamilyServerInterpreted) { + char *dest = (char *) NEXTPTR(req,xChangeHostsReq); + memcpy(dest, siAddr->type, siAddr->typelength); + dest[siAddr->typelength] = '\0'; + memcpy(dest + siAddr->typelength + 1,siAddr->value,siAddr->valuelength); + } else { + memcpy((char *) NEXTPTR(req,xChangeHostsReq), host->address, addrlen); + } UnlockDisplay(dpy); SyncHandle(); return 1; - } +} int -XRemoveHost (dpy, host) - register Display *dpy; - XHostAddress *host; - { +XRemoveHost ( + register Display *dpy, + XHostAddress *host) +{ register xChangeHostsReq *req; - register int length = (host->length + 3) & ~0x3; /* round up */ + register int length; + XServerInterpretedAddress *siAddr; + int addrlen; + + if (host->family == FamilyServerInterpreted) { + siAddr = (XServerInterpretedAddress *) host->address; + addrlen = siAddr->typelength + siAddr->valuelength + 1; + } else { + addrlen = host->length; + } + + length = (addrlen + 3) & ~0x3; /* round up */ LockDisplay(dpy); GetReqExtra (ChangeHosts, length, req); req->mode = HostDelete; req->hostFamily = host->family; - req->hostLength = host->length; - memcpy((char *) NEXTPTR(req,xChangeHostsReq), host->address, host->length); + req->hostLength = addrlen; + if (host->family == FamilyServerInterpreted) { + char *dest = (char *) NEXTPTR(req,xChangeHostsReq); + memcpy(dest, siAddr->type, siAddr->typelength); + dest[siAddr->typelength] = '\0'; + memcpy(dest + siAddr->typelength + 1,siAddr->value,siAddr->valuelength); + } else { + memcpy((char *) NEXTPTR(req,xChangeHostsReq), host->address, addrlen); + } UnlockDisplay(dpy); SyncHandle(); return 1; - } +} int -XAddHosts (dpy, hosts, n) - register Display *dpy; - XHostAddress *hosts; - int n; +XAddHosts ( + register Display *dpy, + XHostAddress *hosts, + int n) { register int i; for (i = 0; i < n; i++) { @@ -82,10 +129,10 @@ XAddHosts (dpy, hosts, n) } int -XRemoveHosts (dpy, hosts, n) - register Display *dpy; - XHostAddress *hosts; - int n; +XRemoveHosts ( + register Display *dpy, + XHostAddress *hosts, + int n) { register int i; for (i = 0; i < n; i++) { |