aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Gabriel <mike.gabriel@das-netzwerkteam.de>2016-06-29 13:10:08 +0200
committerMike Gabriel <mike.gabriel@das-netzwerkteam.de>2016-07-05 08:11:41 +0200
commit5e2e760d3a7b6a671f21169bf5220f482eb2c17d (patch)
treec63e0e9720b5b31e9c0a8a69410c5ac22d41dd3d
parent35dbbd7e448f327d0496b76a8170df025b0fcea0 (diff)
downloadnx-libs-5e2e760d3a7b6a671f21169bf5220f482eb2c17d.tar.gz
nx-libs-5e2e760d3a7b6a671f21169bf5220f482eb2c17d.tar.bz2
nx-libs-5e2e760d3a7b6a671f21169bf5220f482eb2c17d.zip
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: Alan Coopersmith <alan.coopersmith@oracle.com>
-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