Commit 5e2e760d authored by Mike Gabriel's avatar Mike Gabriel

Avoid 'siAddr' maybe being used uninitialized in XAddHost and XRemoveHost.

Backported from X.org (libX11). Host.c has mainly been copied over from libX11, contaning 7db7451 as the top commit (which also contains the greatest change and silences the resp. compiler warning. commit 7db74514e454d3fc4ff70aa08ddac66bfffda4dd Author: Alan Coopersmith <alan.coopersmith@oracle.com> Date: Tue Jul 23 22:18:46 2013 -0700 Refactor common code from XAddHost & XRemoveHost into single function 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: 's avatarAlan Coopersmith <alan.coopersmith@oracle.com>
parent 35dbbd7e
......@@ -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
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment