[PATCH:libX11 2/2] Refactor common code from XAddHost & XRemoveHost into single function

Alan Coopersmith alan.coopersmith at oracle.com
Tue Jul 23 22:45:14 PDT 2013


On the Xlib side, the only real difference is the mode flag we send
to the server with the address, so just make that an argument to the
function with the common code for packing the address into the request.

(Aside from labels, gcc 4.7.2 generates identical code before & after
 this change due to inlining, verified via diff of gcc -S output.)

Signed-off-by: Alan Coopersmith <alan.coopersmith at oracle.com>
---
 src/Host.c |   53 ++++++++++++++---------------------------------------
 1 file changed, 14 insertions(+), 39 deletions(-)

diff --git a/src/Host.c b/src/Host.c
index da5e2f7..b07c9c3 100644
--- a/src/Host.c
+++ b/src/Host.c
@@ -64,13 +64,11 @@ 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;
 
@@ -87,7 +85,7 @@ XAddHost (
 	UnlockDisplay(dpy);
 	return 0;
     }
-    req->mode = HostInsert;
+    req->mode = mode;
     req->hostFamily = host->family;
     req->hostLength = addrlen;
     if (siAddr) {
@@ -104,42 +102,19 @@ XAddHost (
 }
 
 int
-XRemoveHost (
+XAddHost (
     register Display *dpy,
     XHostAddress *host)
 {
-    register xChangeHostsReq *req;
-    register int length;
-    XServerInterpretedAddress *siAddr;
-    int addrlen;
-
-    siAddr = host->family == FamilyServerInterpreted ?
-	(XServerInterpretedAddress *)host->address : NULL;
-    addrlen = siAddr ?
-	siAddr->typelength + siAddr->valuelength + 1 : host->length;
-
-    length = (addrlen + 3) & ~0x3;	/* round up */
+    return changehost(dpy, host, HostInsert);
+}
 
-    LockDisplay(dpy);
-    GetReqExtra (ChangeHosts, length, req);
-    if (!req) {
-	UnlockDisplay(dpy);
-	return 0;
-    }
-    req->mode = HostDelete;
-    req->hostFamily = host->family;
-    req->hostLength = addrlen;
-    if (siAddr) {
-	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
-- 
1.7.9.2



More information about the xorg-devel mailing list