Author: Mihai Moldovan <ionic@ionic.de>
Description: Several fixes for building debug versions of NX
Abstract:
 (1) In nx-X11/programs/Xserver/dix:
 .
 Fix several compile errors when specifying -DDEBUG globally. Previous GCC
 versions were more liberal and the code thus compiled.
 .
 Also initialize/reset a count variable correctly.
 .
 .
 (2) In nx-X11/programs/Xserver/hw/nxagent/Render.c:
 .
 Check for pSrc->pDrawable to exist instead of having nxagent segfault when
 it does not.
 .
 This enables the possibility of compiling all nxagent modules in TEST mode.

--- a/nx-X11/programs/Xserver/dix/dixfonts.c
+++ b/nx-X11/programs/Xserver/dix/dixfonts.c
@@ -2203,7 +2203,7 @@ dump_char_ascii(CharInfoPtr cip)
 	byte = 0;
 	for (l = 0; l <= (cip->metrics.rightSideBearing -
 			  cip->metrics.leftSideBearing); l++) {
-	    if (maskTab[l & 7] & row[l >> 3])
+	    if (maskTab[l & 7] & (((int*)row)[l >> 3]))
 		putchar('X');
 	    else
 		putchar('.');
--- a/nx-X11/programs/Xserver/hw/nxagent/Render.c
+++ b/nx-X11/programs/Xserver/hw/nxagent/Render.c
@@ -946,7 +946,7 @@ void nxagentChangePicture(PicturePtr pPi
 
   #ifdef TEST
 
-  if (pPicture -> pDrawable -> type == DRAWABLE_PIXMAP)
+  if (pPicture && pPicture->pDrawable && pPicture -> pDrawable -> type == DRAWABLE_PIXMAP)
   {
     fprintf(stderr, "nxagentChangePicture: %sPixmap [%p] Picture [%p][%p].\n",
                 nxagentIsShmPixmap((PixmapPtr)pPicture -> pDrawable) ? "Shared " : "",
@@ -1008,7 +1008,7 @@ void nxagentComposite(CARD8 op, PictureP
 
   #ifdef DEBUG
 
-  if (pSrc -> pDrawable != NULL)
+  if (pSrc && pSrc -> pDrawable != NULL)
   {
     fprintf(stderr, "nxagentComposite: Source Picture [%lu][%p] with drawable [%s%s][%p].\n",
                 nxagentPicturePriv(pSrc) -> picture, (void *) pSrc,
@@ -1018,14 +1018,16 @@ void nxagentComposite(CARD8 op, PictureP
                              (void *) pSrc -> pDrawable);
   }
 
-  fprintf(stderr, "nxagentComposite: Destination Picture [%lu][%p] with drawable [%s%s][%p].\n",
-              nxagentPicturePriv(pDst) -> picture, (void *) pDst,
-              (pDst -> pDrawable -> type == DRAWABLE_PIXMAP &&
-                  nxagentIsShmPixmap((PixmapPtr) pDst -> pDrawable)) ? "Shared " : "",
-                       pDst -> pDrawable -> type == DRAWABLE_PIXMAP ? "Pixmap" : "Window",
-                           (void *) pDst -> pDrawable);
+  if (pDst && pDst->pDrawable) {
+    fprintf(stderr, "nxagentComposite: Destination Picture [%lu][%p] with drawable [%s%s][%p].\n",
+                nxagentPicturePriv(pDst) -> picture, (void *) pDst,
+                (pDst -> pDrawable -> type == DRAWABLE_PIXMAP &&
+                    nxagentIsShmPixmap((PixmapPtr) pDst -> pDrawable)) ? "Shared " : "",
+                         pDst -> pDrawable -> type == DRAWABLE_PIXMAP ? "Pixmap" : "Window",
+                             (void *) pDst -> pDrawable);
+  }
 
-  if (pMask)
+  if (pMask && pMask->pDrawable)
   {
     fprintf(stderr, "nxagentComposite: Mask Picture [%lu][%p] with drawable [%s%s][%p].\n",
                 nxagentPicturePriv(pMask) -> picture, (void *) pMask,
@@ -1042,12 +1044,13 @@ void nxagentComposite(CARD8 op, PictureP
     pDstRegion = nxagentCreateRegion(pDst -> pDrawable, NULL, xDst, yDst, width, height);
 
     #ifdef TEST
-    fprintf(stderr, "nxagentComposite: WARNING! Prevented operation on region [%d,%d,%d,%d] "
-                "for drawable at [%p] with type [%s].\n", pDstRegion -> extents.x1,
-                    pDstRegion -> extents.y1, pDstRegion -> extents.x2, pDstRegion -> extents.y2,
-                        (void *) pDst -> pDrawable,
-                            pDst -> pDrawable -> type == DRAWABLE_PIXMAP ? "pixmap" : "window");
-
+    if ((pDstRegion) && (pDst && pDst->pDrawable)) {
+      fprintf(stderr, "nxagentComposite: WARNING! Prevented operation on region [%d,%d,%d,%d] "
+                  "for drawable at [%p] with type [%s].\n", pDstRegion -> extents.x1,
+                      pDstRegion -> extents.y1, pDstRegion -> extents.x2, pDstRegion -> extents.y2,
+                          (void *) pDst -> pDrawable,
+                              pDst -> pDrawable -> type == DRAWABLE_PIXMAP ? "pixmap" : "window");
+    }
     #endif
 
     nxagentMarkCorruptedRegion(pDst -> pDrawable, pDstRegion);
@@ -1176,10 +1179,12 @@ void nxagentGlyphs(CARD8 op, PicturePtr 
   }
 
   #ifdef TEST
-  fprintf(stderr, "nxagentGlyphs: Called with source [%s][%p] destination [%s][%p] and size id [%d].\n",
-              (pSrc -> pDrawable -> type == DRAWABLE_PIXMAP ? "pixmap" : "window"), (void *) pSrc, 
-                  (pDst -> pDrawable -> type == DRAWABLE_PIXMAP ? "pixmap" : "window"), (void *) pDst, 
-                      sizeID);
+  if ((pSrc && pSrc->pDrawable) && (pDst && pDst->pDrawable)) {
+      fprintf(stderr, "nxagentGlyphs: Called with source [%s][%p] destination [%s][%p] and size id [%d].\n",
+                  (pSrc -> pDrawable -> type == DRAWABLE_PIXMAP ? "pixmap" : "window"), (void *) pSrc, 
+                      (pDst -> pDrawable -> type == DRAWABLE_PIXMAP ? "pixmap" : "window"), (void *) pDst, 
+                          sizeID);
+  }
   #endif
 
   pForm = NULL;
@@ -1264,9 +1269,11 @@ void nxagentGlyphs(CARD8 op, PicturePtr 
           nxagentDrawableStatus(pSrc -> pDrawable) == NotSynchronized)
   {
     #ifdef TEST
-    fprintf(stderr, "nxagentGlyphs: Synchronizing source [%s] at [%p].\n",
-                pSrc -> pDrawable -> type == DRAWABLE_PIXMAP ? "pixmap" : "window",
-                    (void *) pSrc -> pDrawable);
+    if (pSrc && pSrc->pDrawable) {
+      fprintf(stderr, "nxagentGlyphs: Synchronizing source [%s] at [%p].\n",
+                  pSrc -> pDrawable -> type == DRAWABLE_PIXMAP ? "pixmap" : "window",
+                      (void *) pSrc -> pDrawable);
+    }
     #endif
 
     /*
@@ -1280,12 +1287,14 @@ void nxagentGlyphs(CARD8 op, PicturePtr 
     if (pSrc -> repeat == 1 || nxagentGlyphsExtents == NullBox)
     {
       #ifdef DEBUG
-      fprintf(stderr, "nxagentGlyphs: Synchronizing source [%s] at [%p] "
-                  "with geometry [%d,%d,%d,%d].\n", 
-                      (pSrc -> pDrawable -> type == DRAWABLE_PIXMAP ? "pixmap" : "window"),
-                          (void *) pSrc -> pDrawable, pSrc -> pDrawable -> x, pSrc -> pDrawable -> y,
-                              pSrc -> pDrawable -> x + pSrc -> pDrawable -> width,
-                                  pSrc -> pDrawable -> y + pSrc -> pDrawable -> height);
+      if (pSrc && pSrc->pDrawable) {
+        fprintf(stderr, "nxagentGlyphs: Synchronizing source [%s] at [%p] "
+                    "with geometry [%d,%d,%d,%d].\n", 
+                        (pSrc -> pDrawable -> type == DRAWABLE_PIXMAP ? "pixmap" : "window"),
+                            (void *) pSrc -> pDrawable, pSrc -> pDrawable -> x, pSrc -> pDrawable -> y,
+                                pSrc -> pDrawable -> x + pSrc -> pDrawable -> width,
+                                    pSrc -> pDrawable -> y + pSrc -> pDrawable -> height);
+      }
       #endif
 
       nxagentSynchronizeBox(pSrc -> pDrawable, NullBox, NEVER_BREAK);
@@ -1293,12 +1302,14 @@ void nxagentGlyphs(CARD8 op, PicturePtr 
     else
     {
       #ifdef DEBUG
-      fprintf(stderr, "nxagentGlyphs: Synchronizing region [%d,%d,%d,%d] of source [%s] at [%p] "
-                  "with geometry [%d,%d,%d,%d].\n", glyphBox.x1, glyphBox.y1, glyphBox.x2, glyphBox.y2,
-                          (pSrc -> pDrawable -> type == DRAWABLE_PIXMAP ? "pixmap" : "window"),
-                              (void *) pSrc -> pDrawable, pSrc -> pDrawable -> x, pSrc -> pDrawable -> y,
-                                  pSrc -> pDrawable -> x + pSrc -> pDrawable -> width,
-                                      pSrc -> pDrawable -> y + pSrc -> pDrawable -> height);
+      if (pSrc && pSrc->pDrawable) {
+        fprintf(stderr, "nxagentGlyphs: Synchronizing region [%d,%d,%d,%d] of source [%s] at [%p] "
+                    "with geometry [%d,%d,%d,%d].\n", glyphBox.x1, glyphBox.y1, glyphBox.x2, glyphBox.y2,
+                            (pSrc -> pDrawable -> type == DRAWABLE_PIXMAP ? "pixmap" : "window"),
+                                (void *) pSrc -> pDrawable, pSrc -> pDrawable -> x, pSrc -> pDrawable -> y,
+                                    pSrc -> pDrawable -> x + pSrc -> pDrawable -> width,
+                                        pSrc -> pDrawable -> y + pSrc -> pDrawable -> height);
+      }
       #endif
 
       nxagentSynchronizeBox(pSrc -> pDrawable, &glyphBox, NEVER_BREAK);
@@ -1314,20 +1325,24 @@ void nxagentGlyphs(CARD8 op, PicturePtr 
           nxagentDrawableStatus(pDst -> pDrawable) == NotSynchronized)
   {
     #ifdef TEST
-    fprintf(stderr, "nxagentGlyphs: Synchronizing destination [%s] at [%p].\n",
-                pDst -> pDrawable -> type == DRAWABLE_PIXMAP ? "pixmap" : "window",
-                    (void *) pDst -> pDrawable);
+    if (pDst && pDst->pDrawable) {
+      fprintf(stderr, "nxagentGlyphs: Synchronizing destination [%s] at [%p].\n",
+                  pDst -> pDrawable -> type == DRAWABLE_PIXMAP ? "pixmap" : "window",
+                      (void *) pDst -> pDrawable);
+    }
     #endif
 
     if (nxagentGlyphsExtents == NullBox)
     {
       #ifdef DEBUG
-      fprintf(stderr, "nxagentGlyphs: Synchronizing destination [%s] at [%p] "
-                  "with geometry [%d,%d,%d,%d].\n", 
-                      (pDst -> pDrawable -> type == DRAWABLE_PIXMAP ? "pixmap" : "window"),
-                          (void *) pDst -> pDrawable, pDst -> pDrawable -> x, pDst -> pDrawable -> y,
-                              pDst -> pDrawable -> x + pDst -> pDrawable -> width,
-                                  pDst -> pDrawable -> y + pDst -> pDrawable -> height);
+      if (pDst && pDst->pDrawable) {
+        fprintf(stderr, "nxagentGlyphs: Synchronizing destination [%s] at [%p] "
+                    "with geometry [%d,%d,%d,%d].\n", 
+                        (pDst -> pDrawable -> type == DRAWABLE_PIXMAP ? "pixmap" : "window"),
+                            (void *) pDst -> pDrawable, pDst -> pDrawable -> x, pDst -> pDrawable -> y,
+                                pDst -> pDrawable -> x + pDst -> pDrawable -> width,
+                                    pDst -> pDrawable -> y + pDst -> pDrawable -> height);
+      }
       #endif
 
       nxagentSynchronizeBox(pDst -> pDrawable, NullBox, NEVER_BREAK);
@@ -1335,12 +1350,14 @@ void nxagentGlyphs(CARD8 op, PicturePtr 
     else
     {
       #ifdef DEBUG
-      fprintf(stderr, "nxagentGlyphs: Synchronizing region [%d,%d,%d,%d] of destination [%s] at [%p] "
-                  "with geometry [%d,%d,%d,%d].\n", glyphBox.x1, glyphBox.y1, glyphBox.x2, glyphBox.y2,
-                          (pDst -> pDrawable -> type == DRAWABLE_PIXMAP ? "pixmap" : "window"),
-                              (void *) pDst -> pDrawable, pDst -> pDrawable -> x, pDst -> pDrawable -> y,
-                                  pDst -> pDrawable -> x + pDst -> pDrawable -> width,
-                                      pDst -> pDrawable -> y + pDst -> pDrawable -> height);
+      if (pDst && pDst->pDrawable) {
+        fprintf(stderr, "nxagentGlyphs: Synchronizing region [%d,%d,%d,%d] of destination [%s] at [%p] "
+                    "with geometry [%d,%d,%d,%d].\n", glyphBox.x1, glyphBox.y1, glyphBox.x2, glyphBox.y2,
+                            (pDst -> pDrawable -> type == DRAWABLE_PIXMAP ? "pixmap" : "window"),
+                                (void *) pDst -> pDrawable, pDst -> pDrawable -> x, pDst -> pDrawable -> y,
+                                    pDst -> pDrawable -> x + pDst -> pDrawable -> width,
+                                        pDst -> pDrawable -> y + pDst -> pDrawable -> height);
+      }
       #endif
 
       nxagentSynchronizeBox(pDst -> pDrawable, &glyphBox, NEVER_BREAK);
@@ -1355,9 +1372,11 @@ void nxagentGlyphs(CARD8 op, PicturePtr 
   nxagentSetDrawableContainGlyphs(pDst -> pDrawable, 1);
 
   #ifdef TEST
-  fprintf(stderr, "nxagentGlyphs: Glyph flag set on drawable [%s][%p].\n",
-              pDst -> pDrawable -> type == DRAWABLE_PIXMAP ? "pixmap" : "window",
-                  (void *) pDst -> pDrawable);
+  if (pDst && pDst->pDrawable) {
+    fprintf(stderr, "nxagentGlyphs: Glyph flag set on drawable [%s][%p].\n",
+                pDst -> pDrawable -> type == DRAWABLE_PIXMAP ? "pixmap" : "window",
+                    (void *) pDst -> pDrawable);
+  }
   #endif
 
   #ifdef SPLIT_GLYPH_LISTS
@@ -1569,9 +1588,11 @@ void nxagentCompositeRects(CARD8 op, Pic
   }
 
   #ifdef TEST
-  fprintf(stderr, "nxagentCompositeRects: Called for picture at [%p] with [%s] at [%p].\n",
-              (void *) pDst, (pDst -> pDrawable -> type == DRAWABLE_PIXMAP ? "pixmap" : "window"),
-                  (void *) pDst -> pDrawable);
+  if (pDst && pDst->pDrawable) {
+    fprintf(stderr, "nxagentCompositeRects: Called for picture at [%p] with [%s] at [%p].\n",
+                (void *) pDst, (pDst -> pDrawable -> type == DRAWABLE_PIXMAP ? "pixmap" : "window"),
+                    (void *) pDst -> pDrawable);
+  }
   #endif
 
   /*
@@ -1678,10 +1699,11 @@ FIXME: Is this useful or just a waste of
 
   #ifdef TEST
 
-  fprintf(stderr, "nxagentTrapezoids: Source is a [%s] of geometry [%d,%d].\n",
-              (pSrc -> pDrawable -> type == DRAWABLE_PIXMAP ? "pixmap" : "window"),
-                  pSrc -> pDrawable -> width, pSrc -> pDrawable -> height);
-
+  if (pSrc && pSrc->pDrawable) {
+    fprintf(stderr, "nxagentTrapezoids: Source is a [%s] of geometry [%d,%d].\n",
+                (pSrc -> pDrawable -> type == DRAWABLE_PIXMAP ? "pixmap" : "window"),
+                    pSrc -> pDrawable -> width, pSrc -> pDrawable -> height);
+  }
   if (pSrc ->pDrawable != pDst -> pDrawable)
   {
     fprintf(stderr, "nxagentTrapezoids: Destination is a [%s] of geometry [%d,%d].\n",
@@ -1702,11 +1724,13 @@ FIXME: Is this useful or just a waste of
                              nxagentTrapezoidExtents) == rgnIN)
   {
     #ifdef TEST
-    fprintf(stderr, "nxagentTrapezoids: WARNING! Prevented operation on region [%d,%d,%d,%d] already dirty "
-                "for drawable [%s][%p].\n", nxagentTrapezoidExtents -> x1, nxagentTrapezoidExtents -> y1,
-                    nxagentTrapezoidExtents -> x2, nxagentTrapezoidExtents -> y2,
-                        pDst -> pDrawable -> type == DRAWABLE_PIXMAP ? "pixmap" : "window",
-                            (void *) pDst -> pDrawable);
+    if (pDst && pDst->pDrawable) {
+      fprintf(stderr, "nxagentTrapezoids: WARNING! Prevented operation on region [%d,%d,%d,%d] already dirty "
+                  "for drawable [%s][%p].\n", nxagentTrapezoidExtents -> x1, nxagentTrapezoidExtents -> y1,
+                      nxagentTrapezoidExtents -> x2, nxagentTrapezoidExtents -> y2,
+                          pDst -> pDrawable -> type == DRAWABLE_PIXMAP ? "pixmap" : "window",
+                              (void *) pDst -> pDrawable);
+    }
     #endif
 
     if (pDst -> pDrawable -> type == DRAWABLE_PIXMAP)
@@ -1732,11 +1756,13 @@ FIXME: Is this useful or just a waste of
                                      nxagentTrapezoidExtents -> y2 - nxagentTrapezoidExtents -> y1);
 
     #ifdef TEST
-    fprintf(stderr, "nxagentTrapezoids: WARNING! Prevented operation on region [%d,%d,%d,%d] "
-                "for drawable [%s][%p].\n", pDstRegion -> extents.x1, pDstRegion -> extents.y1,
-                    pDstRegion -> extents.x2, pDstRegion -> extents.y2,
-                        pDst -> pDrawable -> type == DRAWABLE_PIXMAP ? "pixmap" : "window",
-                            (void *) pDst -> pDrawable);
+    if (pDst && pDst->pDrawable) {
+      fprintf(stderr, "nxagentTrapezoids: WARNING! Prevented operation on region [%d,%d,%d,%d] "
+                  "for drawable [%s][%p].\n", pDstRegion -> extents.x1, pDstRegion -> extents.y1,
+                      pDstRegion -> extents.x2, pDstRegion -> extents.y2,
+                          pDst -> pDrawable -> type == DRAWABLE_PIXMAP ? "pixmap" : "window",
+                              (void *) pDst -> pDrawable);
+    }
     #endif
 
     nxagentMarkCorruptedRegion(pDst -> pDrawable, pDstRegion);
--- a/nx-X11/programs/Xserver/hw/nxagent/X/NXdispatch.c
+++ b/nx-X11/programs/Xserver/hw/nxagent/X/NXdispatch.c
@@ -735,7 +735,7 @@ Reply   Total	Cached	Bits In			Bits Out	
 
 		client->sequence++;
 #ifdef DEBUG
-		if (client->requestLogIndex == MAX_REQUEST_LOG)
+		if ((client->requestLogIndex >= MAX_REQUEST_LOG) || (client->requestLogIndex <= 0))
 		    client->requestLogIndex = 0;
 		client->requestLog[client->requestLogIndex] = MAJOROP;
 		client->requestLogIndex++;
--- a/nx-X11/programs/Xserver/hw/nxagent/X/NXdixfonts.c
+++ b/nx-X11/programs/Xserver/hw/nxagent/X/NXdixfonts.c
@@ -2351,7 +2351,7 @@ dump_char_ascii(CharInfoPtr cip)
 	byte = 0;
 	for (l = 0; l <= (cip->metrics.rightSideBearing -
 			  cip->metrics.leftSideBearing); l++) {
-	    if (maskTab[l & 7] & row[l >> 3])
+	    if (maskTab[l & 7] & (((int *)row)[l >> 3]))
 		putchar('X');
 	    else
 		putchar('.');
