aboutsummaryrefslogtreecommitdiff
path: root/nx-X11/lib/X11/Host.c
diff options
context:
space:
mode:
Diffstat (limited to 'nx-X11/lib/X11/Host.c')
-rw-r--r--nx-X11/lib/X11/Host.c73
1 files changed, 26 insertions, 47 deletions
diff --git a/nx-X11/lib/X11/Host.c b/nx-X11/lib/X11/Host.c
index 58e9e4a1c..5fcb687cc 100644
--- a/nx-X11/lib/X11/Host.c
+++ b/nx-X11/lib/X11/Host.c
@@ -44,31 +44,31 @@ X Window System is a trademark of The Open Group.
#endif
#include "Xlibint.h"
-int
-XAddHost (
- register Display *dpy,
- XHostAddress *host)
+static inline int
+changehost (Display *dpy, XHostAddress *host, BYTE mode)
{
- register xChangeHostsReq *req;
- register int length;
+ xChangeHostsReq *req;
+ 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 */
-
+ siAddr = host->family == FamilyServerInterpreted ?
+ (XServerInterpretedAddress *)host->address : NULL;
+ addrlen = siAddr ?
+ siAddr->typelength + siAddr->valuelength + 1 : host->length;
+
+ length = (addrlen + 3) & ~0x3; /* round up */
+
LockDisplay(dpy);
GetReqExtra (ChangeHosts, length, req);
- req->mode = HostInsert;
+ if (!req) {
+ UnlockDisplay(dpy);
+ return 0;
+ }
+ req->mode = mode;
req->hostFamily = host->family;
req->hostLength = addrlen;
- if (host->family == FamilyServerInterpreted) {
+ if (siAddr) {
char *dest = (char *) NEXTPTR(req,xChangeHostsReq);
memcpy(dest, siAddr->type, siAddr->typelength);
dest[siAddr->typelength] = '\0';
@@ -82,40 +82,19 @@ XAddHost (
}
int
-XRemoveHost (
+XAddHost (
register Display *dpy,
XHostAddress *host)
{
- register xChangeHostsReq *req;
- 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 */
+ return changehost(dpy, host, HostInsert);
+}
- LockDisplay(dpy);
- GetReqExtra (ChangeHosts, length, req);
- req->mode = HostDelete;
- req->hostFamily = host->family;
- 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 (
+ register Display *dpy,
+ XHostAddress *host)
+{
+ return changehost(dpy, host, HostDelete);
}
int