summaryrefslogtreecommitdiffabout
Side-by-side diff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--ui-tree.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/ui-tree.c b/ui-tree.c
index a37a4e5..c6159ec 100644
--- a/ui-tree.c
+++ b/ui-tree.c
@@ -24,47 +24,52 @@ static void print_text_buffer(char *buf, unsigned long size)
html("<table summary='blob content' class='blob'>\n");
html("<tr><td class='linenumbers'><pre>");
idx = 0;
lineno = 0;
htmlf(numberfmt, ++lineno);
while(idx < size - 1) { // skip absolute last newline
if (buf[idx] == '\n')
htmlf(numberfmt, ++lineno);
idx++;
}
html("</pre></td>\n");
html("<td class='lines'><pre><code>");
html_txt(buf);
html("</code></pre></td></tr></table>\n");
}
+#define ROWLEN 32
+
static void print_binary_buffer(char *buf, unsigned long size)
{
unsigned long ofs, idx;
+ static char ascii[ROWLEN + 1];
html("<table summary='blob content' class='bin-blob'>\n");
html("<tr><th>ofs</th><th>hex dump</th><th>ascii</th></tr>");
- for (ofs = 0; ofs < size; ofs += 32, buf += 32) {
+ for (ofs = 0; ofs < size; ofs += ROWLEN, buf += ROWLEN) {
htmlf("<tr><td class='right'>%04x</td><td class='hex'>", ofs);
- for (idx = 0; idx < 32 && ofs + idx < size; idx++)
+ for (idx = 0; idx < ROWLEN && ofs + idx < size; idx++)
htmlf("%*s%02x",
idx == 16 ? 4 : 1, "",
buf[idx] & 0xff);
html(" </td><td class='hex'>");
- for (idx = 0; idx < 32 && ofs + idx < size; idx++)
- htmlf("%c", isgraph(buf[idx]) ? buf[idx] : '.');
+ for (idx = 0; idx < ROWLEN && ofs + idx < size; idx++)
+ ascii[idx] = isgraph(buf[idx]) ? buf[idx] : '.';
+ ascii[idx] = '\0';
+ html_txt(ascii);
html("</td></tr>\n");
}
html("</table>\n");
}
static void print_object(const unsigned char *sha1, char *path)
{
enum object_type type;
char *buf;
unsigned long size;
type = sha1_object_info(sha1, &size);
if (type == OBJ_BAD) {
cgit_print_error(fmt("Bad object name: %s",
sha1_to_hex(sha1)));
return;