diff options
author | Teodor Madan | 2011-04-08 13:59:12 +0000 |
---|---|---|
committer | Teodor Madan | 2011-04-08 13:59:12 +0000 |
commit | 60417d5ce531d42e6aafbf21d242cfabb9012ff1 (patch) | |
tree | bfce6483145d05517a5a779e0f1a703aecd9d2a5 /memory/org.eclipse.cdt.debug.ui.memory.traditional | |
parent | 8ac1692a9e831fdf692fca809bba69ea2e2faf6b (diff) | |
download | org.eclipse.cdt-60417d5ce531d42e6aafbf21d242cfabb9012ff1.tar.gz org.eclipse.cdt-60417d5ce531d42e6aafbf21d242cfabb9012ff1.tar.xz org.eclipse.cdt-60417d5ce531d42e6aafbf21d242cfabb9012ff1.zip |
Bug 342239 - Traditional memory rendering lacks per byte display granularity for unreadable bytes
Diffstat (limited to 'memory/org.eclipse.cdt.debug.ui.memory.traditional')
-rw-r--r-- | memory/org.eclipse.cdt.debug.ui.memory.traditional/src/org/eclipse/cdt/debug/ui/memory/traditional/Rendering.java | 33 |
1 files changed, 25 insertions, 8 deletions
diff --git a/memory/org.eclipse.cdt.debug.ui.memory.traditional/src/org/eclipse/cdt/debug/ui/memory/traditional/Rendering.java b/memory/org.eclipse.cdt.debug.ui.memory.traditional/src/org/eclipse/cdt/debug/ui/memory/traditional/Rendering.java index 60e23b494e4..3dfd908adac 100644 --- a/memory/org.eclipse.cdt.debug.ui.memory.traditional/src/org/eclipse/cdt/debug/ui/memory/traditional/Rendering.java +++ b/memory/org.eclipse.cdt.debug.ui.memory.traditional/src/org/eclipse/cdt/debug/ui/memory/traditional/Rendering.java @@ -1943,12 +1943,19 @@ public class Rendering extends Composite implements IDebugEventSetListener public String getRadixText(MemoryByte bytes[], int radix, boolean isLittleEndian) { - boolean readable = true; - for(int i = 0; i < bytes.length; i++) - if(!bytes[i].isReadable()) - readable = false; + boolean readableByte = false; + boolean allBytesReadable = true; + for(int i = 0; i < bytes.length; i++) { + if(!bytes[i].isReadable()) { + allBytesReadable = false; + } else { + readableByte = true; + } + } - if(readable) + // convert byte to character if all bytes are readable or + // it is a mixed of readable&non-readable bytes and format is Hex or Binary. Bugzilla 342239 + if (allBytesReadable || readableByte && (radix == Rendering.RADIX_HEX || radix == Rendering.RADIX_BINARY)) { // bytes from the cache are stored as a sequential byte sequence regardless of target endian. // the endian attribute tells us the recommended endian for display. the user may change this @@ -1991,8 +1998,13 @@ public class Rendering extends Composite implements IDebugEventSetListener { for(int i = buf.length - 1; i >= 0; i--) { - buf[i] = hexdigits[(int) (value & 1)]; - value = value >>> 1; + int byteIndex = needsSwap ? bytes.length - 1 - i/8 : i/8; + if (bytes[byteIndex].isReadable()) { + buf[i] = hexdigits[(int) (value & 1)]; + } else { + buf[i] = getPaddingCharacter(); + } + value = value >>> 1; } break; } @@ -2009,7 +2021,12 @@ public class Rendering extends Composite implements IDebugEventSetListener { for(int i = buf.length - 1; i >= 0; i--) { - buf[i] = hexdigits[(int) (value & 15)]; + int byteIndex = needsSwap ? bytes.length - 1 - i/2 : i/2; + if (bytes[byteIndex].isReadable()) { + buf[i] = hexdigits[(int) (value & 15)]; + } else { + buf[i] = getPaddingCharacter(); + } value = value >>> 4; } break; |