dump_mem should be fast and correct now (finally)
authorWim Taymans <wim.taymans@gmail.com>
Fri, 21 Feb 2003 19:58:24 +0000 (19:58 +0000)
committerWim Taymans <wim.taymans@gmail.com>
Fri, 21 Feb 2003 19:58:24 +0000 (19:58 +0000)
Original commit message from CVS:
dump_mem should be fast and correct now (finally)

gst/gstutils.c

index 3f1da88..0d2e73f 100644 (file)
  * Dumps the memory block into a hex representation. Useful for debugging.
  */
 void
-gst_util_dump_mem (guchar * mem, guint size)
+gst_util_dump_mem (guchar *mem, guint size)
 {
   guint i, j;
-  GString *string = g_string_sized_new (80);
+  GString *string = g_string_sized_new (50);
+  GString *chars = g_string_sized_new (18);
 
   i = j = 0;
   while (i < size) {
-    if (j == 0) {
-      if (i != 0) {
-       guint k;
-
-       for (k = i - 16; k < i; k++) {
-          if (g_ascii_isprint (mem[k]))
-            g_string_append_printf (string, "%c", mem[k]);
-         else 
-            g_string_append_printf (string, ".");
-       }
-        g_print ("%s\n", string->str);
-       g_string_set_size (string, 0);
-      }
-      g_string_append_printf (string, "%08x (%p): ", i, mem+i);
-      j = 15;
-    }
-    else {
-      j--;
-    }
+    if (g_ascii_isprint (mem[i]))
+      g_string_append_printf (chars, "%c", mem[i]);
+    else 
+      g_string_append_printf (chars, ".");
+
     g_string_append_printf (string, "%02x ", mem[i]);
+
+    j++;
     i++;
+
+    if (j == 16 || i == size) {
+      g_print ("%08x (%p): %-48.48s %-16.16s\n", i-j, mem+i-j, string->str, chars->str);
+      g_string_set_size (string, 0);
+      g_string_set_size (chars, 0);
+      j = 0;
+    }
   }
   g_string_free (string, TRUE);
-  g_print ("\n");
+  g_string_free (chars, TRUE);
 }