wine debugger fix

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



this patch fixes the dumping of arrays of chars in a structure

A+
-- 
---------------
Eric Pouech (http://perso.wanadoo.fr/eric.pouech/)
"The future will be better tomorrow", Vice President Dan Quayle
Name: wdbg
ChangeLog: fixes char array in structure dumping
GenDate: 2002/01/15 22:00:33 UTC
ModifiedFiles: debugger/types.c
AddedFiles: 
===================================================================
RCS file: /home/cvs/cvsroot/wine/wine/debugger/types.c,v
retrieving revision 1.26
diff -u -u -r1.26 types.c
--- debugger/types.c	21 Dec 2001 20:29:59 -0000	1.26
+++ debugger/types.c	15 Jan 2002 21:58:48 -0000
@@ -861,24 +861,41 @@
       size = DEBUG_GetObjectSize(value->type->un.array.basictype);
       if( size == 1 )
 	{
+          char  ach[16];
+          int   len, clen;
+
 	  /*
 	   * Special handling for character arrays.
 	   */
 	  pnt = (char *) value->addr.off;
-	  DEBUG_nchar += DEBUG_Printf(DBG_CHN_MESG, "\"");
-	  for( i=value->type->un.array.start; i < value->type->un.array.end; i++ )
-	    {
-	      DEBUG_Output(DBG_CHN_MESG, pnt++, 1);
-	      DEBUG_nchar++;
-	      if( DEBUG_nchar > DEBUG_maxchar )
-		{
-		  DEBUG_Printf(DBG_CHN_MESG, "...\"");
-		  goto leave;
-		}
-	    }
-	  DEBUG_nchar += DEBUG_Printf(DBG_CHN_MESG, "\"");
-	  break;
-	}
+          len = value->type->un.array.end - value->type->un.array.start + 1;
+          clen = (DEBUG_nchar + len < DEBUG_maxchar) 
+              ? len : (DEBUG_maxchar - DEBUG_nchar);
+
+          DEBUG_nchar += DEBUG_Printf(DBG_CHN_MESG, "\"");
+          switch (value->cookie)
+          {
+          case DV_TARGET:
+              for (i = clen; i > 0; i -= sizeof(ach))
+              {
+                  DEBUG_READ_MEM(pnt, ach, min(sizeof(ach), i));
+                  DEBUG_Output(DBG_CHN_MESG, ach, min(sizeof(ach), i));
+              }
+              break;
+          case DV_HOST:
+              DEBUG_Output(DBG_CHN_MESG, pnt, clen);
+              break;
+          default: assert(0);
+          }
+          DEBUG_nchar += clen;
+          if (clen != len) 
+          {
+              DEBUG_Printf(DBG_CHN_MESG, "...\"");
+              goto leave;
+          }
+          DEBUG_nchar += DEBUG_Printf(DBG_CHN_MESG, "\"");
+          break;
+        }
       val1 = *value;
       val1.type = value->type->un.array.basictype;
       DEBUG_nchar += DEBUG_Printf(DBG_CHN_MESG, "{");

[Index of Archives]     [Gimp for Windows]     [Red Hat]     [Samba]     [Yosemite Camping]     [Graphics Cards]     [Wine Home]

  Powered by Linux