summaryrefslogtreecommitdiffabout
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--Makefile8
-rw-r--r--cache.h1
-rw-r--r--cgit.c2
-rw-r--r--cgit.h1
-rw-r--r--html.c18
-rw-r--r--html.h3
-rw-r--r--ui-blob.c4
-rw-r--r--ui-diff.c2
-rw-r--r--ui-log.c3
-rw-r--r--ui-repolist.c6
-rw-r--r--ui-stats.c18
-rw-r--r--ui-tree.c6
12 files changed, 42 insertions, 30 deletions
diff --git a/Makefile b/Makefile
index 23fdd53..6a47ed2 100644
--- a/Makefile
+++ b/Makefile
@@ -13,12 +13,17 @@ INSTALL = install
13# 13#
14# Define NO_OPENSSL to disable linking with OpenSSL and use bundled SHA1 14# Define NO_OPENSSL to disable linking with OpenSSL and use bundled SHA1
15# implementation (slower). 15# implementation (slower).
16# 16#
17# Define NEEDS_LIBICONV if linking with libc is not enough (eg. Darwin). 17# Define NEEDS_LIBICONV if linking with libc is not enough (eg. Darwin).
18# 18#
19# Define NO_C99_FORMAT if your formatted IO functions (printf/scanf et.al.)
20# do not support the 'size specifiers' introduced by C99, namely ll, hh,
21# j, z, t. (representing long long int, char, intmax_t, size_t, ptrdiff_t).
22# some C compilers supported these specifiers prior to C99 as an extension.
23#
19 24
20#-include config.mak 25#-include config.mak
21 26
22# 27#
23# Platform specific tweaks 28# Platform specific tweaks
24# 29#
@@ -124,12 +129,15 @@ CFLAGS += -DCGIT_CACHE_ROOT='"$(CACHE_ROOT)"'
124ifdef NO_ICONV 129ifdef NO_ICONV
125 CFLAGS += -DNO_ICONV 130 CFLAGS += -DNO_ICONV
126endif 131endif
127ifdef NO_STRCASESTR 132ifdef NO_STRCASESTR
128 CFLAGS += -DNO_STRCASESTR 133 CFLAGS += -DNO_STRCASESTR
129endif 134endif
135ifdef NO_C99_FORMAT
136 CFLAGS += -DNO_C99_FORMAT
137endif
130ifdef NO_OPENSSL 138ifdef NO_OPENSSL
131 CFLAGS += -DNO_OPENSSL 139 CFLAGS += -DNO_OPENSSL
132 GIT_OPTIONS += NO_OPENSSL=1 140 GIT_OPTIONS += NO_OPENSSL=1
133else 141else
134 EXTLIBS += -lcrypto 142 EXTLIBS += -lcrypto
135endif 143endif
diff --git a/cache.h b/cache.h
index ac9276b..5cfdb4f 100644
--- a/cache.h
+++ b/cache.h
@@ -27,11 +27,12 @@ extern int cache_process(int size, const char *path, const char *key, int ttl,
27 27
28 28
29/* List info about all cache entries on stdout */ 29/* List info about all cache entries on stdout */
30extern int cache_ls(const char *path); 30extern int cache_ls(const char *path);
31 31
32/* Print a message to stdout */ 32/* Print a message to stdout */
33__attribute__((format (printf,1,2)))
33extern void cache_log(const char *format, ...); 34extern void cache_log(const char *format, ...);
34 35
35extern unsigned long hash_str(const char *str); 36extern unsigned long hash_str(const char *str);
36 37
37#endif /* CGIT_CACHE_H */ 38#endif /* CGIT_CACHE_H */
diff --git a/cgit.c b/cgit.c
index e1d2216..96900bb 100644
--- a/cgit.c
+++ b/cgit.c
@@ -607,13 +607,13 @@ static void process_cached_repolist(const char *path)
607 time_t age; 607 time_t age;
608 unsigned long hash; 608 unsigned long hash;
609 609
610 hash = hash_str(path); 610 hash = hash_str(path);
611 if (ctx.cfg.project_list) 611 if (ctx.cfg.project_list)
612 hash += hash_str(ctx.cfg.project_list); 612 hash += hash_str(ctx.cfg.project_list);
613 cached_rc = xstrdup(fmt("%s/rc-%8x", ctx.cfg.cache_root, hash)); 613 cached_rc = xstrdup(fmt("%s/rc-%8lx", ctx.cfg.cache_root, hash));
614 614
615 if (stat(cached_rc, &st)) { 615 if (stat(cached_rc, &st)) {
616 /* Nothing is cached, we need to scan without forking. And 616 /* Nothing is cached, we need to scan without forking. And
617 * if we fail to generate a cached repolist, we need to 617 * if we fail to generate a cached repolist, we need to
618 * invoke scan_tree manually. 618 * invoke scan_tree manually.
619 */ 619 */
diff --git a/cgit.h b/cgit.h
index f8076c5..8f5dd2a 100644
--- a/cgit.h
+++ b/cgit.h
@@ -292,12 +292,13 @@ extern int cgit_diff_files(const unsigned char *old_sha1,
292extern void cgit_diff_tree(const unsigned char *old_sha1, 292extern void cgit_diff_tree(const unsigned char *old_sha1,
293 const unsigned char *new_sha1, 293 const unsigned char *new_sha1,
294 filepair_fn fn, const char *prefix, int ignorews); 294 filepair_fn fn, const char *prefix, int ignorews);
295 295
296extern void cgit_diff_commit(struct commit *commit, filepair_fn fn); 296extern void cgit_diff_commit(struct commit *commit, filepair_fn fn);
297 297
298__attribute__((format (printf,1,2)))
298extern char *fmt(const char *format,...); 299extern char *fmt(const char *format,...);
299 300
300extern struct commitinfo *cgit_parse_commit(struct commit *commit); 301extern struct commitinfo *cgit_parse_commit(struct commit *commit);
301extern struct taginfo *cgit_parse_tag(struct tag *tag); 302extern struct taginfo *cgit_parse_tag(struct tag *tag);
302extern void cgit_parse_url(const char *url); 303extern void cgit_parse_url(const char *url);
303 304
diff --git a/html.c b/html.c
index eaabf72..1305910 100644
--- a/html.c
+++ b/html.c
@@ -92,13 +92,13 @@ void html_status(int code, const char *msg, int more_headers)
92void html_txt(const char *txt) 92void html_txt(const char *txt)
93{ 93{
94 const char *t = txt; 94 const char *t = txt;
95 while(t && *t){ 95 while(t && *t){
96 int c = *t; 96 int c = *t;
97 if (c=='<' || c=='>' || c=='&') { 97 if (c=='<' || c=='>' || c=='&') {
98 write(htmlfd, txt, t - txt); 98 html_raw(txt, t - txt);
99 if (c=='>') 99 if (c=='>')
100 html("&gt;"); 100 html("&gt;");
101 else if (c=='<') 101 else if (c=='<')
102 html("&lt;"); 102 html("&lt;");
103 else if (c=='&') 103 else if (c=='&')
104 html("&amp;"); 104 html("&amp;");
@@ -113,36 +113,36 @@ void html_txt(const char *txt)
113void html_ntxt(int len, const char *txt) 113void html_ntxt(int len, const char *txt)
114{ 114{
115 const char *t = txt; 115 const char *t = txt;
116 while(t && *t && len--){ 116 while(t && *t && len--){
117 int c = *t; 117 int c = *t;
118 if (c=='<' || c=='>' || c=='&') { 118 if (c=='<' || c=='>' || c=='&') {
119 write(htmlfd, txt, t - txt); 119 html_raw(txt, t - txt);
120 if (c=='>') 120 if (c=='>')
121 html("&gt;"); 121 html("&gt;");
122 else if (c=='<') 122 else if (c=='<')
123 html("&lt;"); 123 html("&lt;");
124 else if (c=='&') 124 else if (c=='&')
125 html("&amp;"); 125 html("&amp;");
126 txt = t+1; 126 txt = t+1;
127 } 127 }
128 t++; 128 t++;
129 } 129 }
130 if (t!=txt) 130 if (t!=txt)
131 write(htmlfd, txt, t - txt); 131 html_raw(txt, t - txt);
132 if (len<0) 132 if (len<0)
133 html("..."); 133 html("...");
134} 134}
135 135
136void html_attr(const char *txt) 136void html_attr(const char *txt)
137{ 137{
138 const char *t = txt; 138 const char *t = txt;
139 while(t && *t){ 139 while(t && *t){
140 int c = *t; 140 int c = *t;
141 if (c=='<' || c=='>' || c=='\'' || c=='\"') { 141 if (c=='<' || c=='>' || c=='\'' || c=='\"') {
142 write(htmlfd, txt, t - txt); 142 html_raw(txt, t - txt);
143 if (c=='>') 143 if (c=='>')
144 html("&gt;"); 144 html("&gt;");
145 else if (c=='<') 145 else if (c=='<')
146 html("&lt;"); 146 html("&lt;");
147 else if (c=='\'') 147 else if (c=='\'')
148 html("&#x27;"); 148 html("&#x27;");
@@ -160,14 +160,14 @@ void html_url_path(const char *txt)
160{ 160{
161 const char *t = txt; 161 const char *t = txt;
162 while(t && *t){ 162 while(t && *t){
163 int c = *t; 163 int c = *t;
164 const char *e = url_escape_table[c]; 164 const char *e = url_escape_table[c];
165 if (e && c!='+' && c!='&' && c!='+') { 165 if (e && c!='+' && c!='&' && c!='+') {
166 write(htmlfd, txt, t - txt); 166 html_raw(txt, t - txt);
167 write(htmlfd, e, 3); 167 html_raw(e, 3);
168 txt = t+1; 168 txt = t+1;
169 } 169 }
170 t++; 170 t++;
171 } 171 }
172 if (t!=txt) 172 if (t!=txt)
173 html(txt); 173 html(txt);
@@ -177,14 +177,14 @@ void html_url_arg(const char *txt)
177{ 177{
178 const char *t = txt; 178 const char *t = txt;
179 while(t && *t){ 179 while(t && *t){
180 int c = *t; 180 int c = *t;
181 const char *e = url_escape_table[c]; 181 const char *e = url_escape_table[c];
182 if (e) { 182 if (e) {
183 write(htmlfd, txt, t - txt); 183 html_raw(txt, t - txt);
184 write(htmlfd, e, 3); 184 html_raw(e, 3);
185 txt = t+1; 185 txt = t+1;
186 } 186 }
187 t++; 187 t++;
188 } 188 }
189 if (t!=txt) 189 if (t!=txt)
190 html(txt); 190 html(txt);
@@ -246,13 +246,13 @@ int html_include(const char *filename)
246 if (!(f = fopen(filename, "r"))) { 246 if (!(f = fopen(filename, "r"))) {
247 fprintf(stderr, "[cgit] Failed to include file %s: %s (%d).\n", 247 fprintf(stderr, "[cgit] Failed to include file %s: %s (%d).\n",
248 filename, strerror(errno), errno); 248 filename, strerror(errno), errno);
249 return -1; 249 return -1;
250 } 250 }
251 while((len = fread(buf, 1, 4096, f)) > 0) 251 while((len = fread(buf, 1, 4096, f)) > 0)
252 write(htmlfd, buf, len); 252 html_raw(buf, len);
253 fclose(f); 253 fclose(f);
254 return 0; 254 return 0;
255} 255}
256 256
257int hextoint(char c) 257int hextoint(char c)
258{ 258{
diff --git a/html.h b/html.h
index 16d55ec..1135fb8 100644
--- a/html.h
+++ b/html.h
@@ -2,13 +2,16 @@
2#define HTML_H 2#define HTML_H
3 3
4extern int htmlfd; 4extern int htmlfd;
5 5
6extern void html_raw(const char *txt, size_t size); 6extern void html_raw(const char *txt, size_t size);
7extern void html(const char *txt); 7extern void html(const char *txt);
8
9__attribute__((format (printf,1,2)))
8extern void htmlf(const char *format,...); 10extern void htmlf(const char *format,...);
11
9extern void html_status(int code, const char *msg, int more_headers); 12extern void html_status(int code, const char *msg, int more_headers);
10extern void html_txt(const char *txt); 13extern void html_txt(const char *txt);
11extern void html_ntxt(int len, const char *txt); 14extern void html_ntxt(int len, const char *txt);
12extern void html_attr(const char *txt); 15extern void html_attr(const char *txt);
13extern void html_url_path(const char *txt); 16extern void html_url_path(const char *txt);
14extern void html_url_arg(const char *txt); 17extern void html_url_arg(const char *txt);
diff --git a/ui-blob.c b/ui-blob.c
index 667a451..ec435e1 100644
--- a/ui-blob.c
+++ b/ui-blob.c
@@ -49,13 +49,13 @@ int cgit_print_file(char *path, const char *head)
49 if (type == OBJ_BAD) 49 if (type == OBJ_BAD)
50 return -1; 50 return -1;
51 buf = read_sha1_file(sha1, &type, &size); 51 buf = read_sha1_file(sha1, &type, &size);
52 if (!buf) 52 if (!buf)
53 return -1; 53 return -1;
54 buf[size] = '\0'; 54 buf[size] = '\0';
55 write(htmlfd, buf, size); 55 html_raw(buf, size);
56 return 0; 56 return 0;
57} 57}
58 58
59void cgit_print_blob(const char *hex, char *path, const char *head) 59void cgit_print_blob(const char *hex, char *path, const char *head)
60{ 60{
61 unsigned char sha1[20]; 61 unsigned char sha1[20];
@@ -105,8 +105,8 @@ void cgit_print_blob(const char *hex, char *path, const char *head)
105 ctx.page.mimetype = "application/octet-stream"; 105 ctx.page.mimetype = "application/octet-stream";
106 else 106 else
107 ctx.page.mimetype = "text/plain"; 107 ctx.page.mimetype = "text/plain";
108 } 108 }
109 ctx.page.filename = path; 109 ctx.page.filename = path;
110 cgit_print_http_headers(&ctx); 110 cgit_print_http_headers(&ctx);
111 write(htmlfd, buf, size); 111 html_raw(buf, size);
112} 112}
diff --git a/ui-diff.c b/ui-diff.c
index 0dcabe9..7ff7e46 100644
--- a/ui-diff.c
+++ b/ui-diff.c
@@ -89,13 +89,13 @@ static void print_fileinfo(struct fileinfo *info)
89 if (info->status == DIFF_STATUS_COPIED || info->status == DIFF_STATUS_RENAMED) 89 if (info->status == DIFF_STATUS_COPIED || info->status == DIFF_STATUS_RENAMED)
90 htmlf(" (%s from %s)", 90 htmlf(" (%s from %s)",
91 info->status == DIFF_STATUS_COPIED ? "copied" : "renamed", 91 info->status == DIFF_STATUS_COPIED ? "copied" : "renamed",
92 info->old_path); 92 info->old_path);
93 html("</td><td class='right'>"); 93 html("</td><td class='right'>");
94 if (info->binary) { 94 if (info->binary) {
95 htmlf("bin</td><td class='graph'>%d -> %d bytes", 95 htmlf("bin</td><td class='graph'>%ld -> %ld bytes",
96 info->old_size, info->new_size); 96 info->old_size, info->new_size);
97 return; 97 return;
98 } 98 }
99 htmlf("%d", info->added + info->removed); 99 htmlf("%d", info->added + info->removed);
100 html("</td><td class='graph'>"); 100 html("</td><td class='graph'>");
101 htmlf("<table summary='file diffstat' width='%d%%'><tr>", (max_changes > 100 ? 100 : max_changes)); 101 htmlf("<table summary='file diffstat' width='%d%%'><tr>", (max_changes > 100 ? 100 : max_changes));
diff --git a/ui-log.c b/ui-log.c
index 0536b23..41b5225 100644
--- a/ui-log.c
+++ b/ui-log.c
@@ -225,14 +225,13 @@ void cgit_print_log(const char *tip, int ofs, int cnt, char *grep, char *pattern
225 free(commit->buffer); 225 free(commit->buffer);
226 commit->buffer = NULL; 226 commit->buffer = NULL;
227 free_commit_list(commit->parents); 227 free_commit_list(commit->parents);
228 commit->parents = NULL; 228 commit->parents = NULL;
229 } 229 }
230 if (pager) { 230 if (pager) {
231 htmlf("</table><div class='pager'>", 231 html("</table><div class='pager'>");
232 columns);
233 if (ofs > 0) { 232 if (ofs > 0) {
234 cgit_log_link("[prev]", NULL, NULL, ctx.qry.head, 233 cgit_log_link("[prev]", NULL, NULL, ctx.qry.head,
235 ctx.qry.sha1, ctx.qry.vpath, 234 ctx.qry.sha1, ctx.qry.vpath,
236 ofs - cnt, ctx.qry.grep, 235 ofs - cnt, ctx.qry.grep,
237 ctx.qry.search, ctx.qry.showmsg); 236 ctx.qry.search, ctx.qry.showmsg);
238 html("&nbsp;"); 237 html("&nbsp;");
diff --git a/ui-repolist.c b/ui-repolist.c
index 0a0b6ca..2c98668 100644
--- a/ui-repolist.c
+++ b/ui-repolist.c
@@ -3,18 +3,12 @@
3 * Copyright (C) 2006 Lars Hjemli 3 * Copyright (C) 2006 Lars Hjemli
4 * 4 *
5 * Licensed under GNU General Public License v2 5 * Licensed under GNU General Public License v2
6 * (see COPYING for full license text) 6 * (see COPYING for full license text)
7 */ 7 */
8 8
9/* This is needed for strcasestr to be defined by <string.h> */
10#define _GNU_SOURCE 1
11#include <string.h>
12
13#include <time.h>
14
15#include "cgit.h" 9#include "cgit.h"
16#include "html.h" 10#include "html.h"
17#include "ui-shared.h" 11#include "ui-shared.h"
18 12
19time_t read_agefile(char *path) 13time_t read_agefile(char *path)
20{ 14{
diff --git a/ui-stats.c b/ui-stats.c
index 50c2540..946a6ea 100644
--- a/ui-stats.c
+++ b/ui-stats.c
@@ -2,12 +2,18 @@
2 2
3#include "cgit.h" 3#include "cgit.h"
4#include "html.h" 4#include "html.h"
5#include "ui-shared.h" 5#include "ui-shared.h"
6#include "ui-stats.h" 6#include "ui-stats.h"
7 7
8#ifdef NO_C99_FORMAT
9#define SZ_FMT "%u"
10#else
11#define SZ_FMT "%zu"
12#endif
13
8#define MONTHS 6 14#define MONTHS 6
9 15
10struct authorstat { 16struct authorstat {
11 long total; 17 long total;
12 struct string_list list; 18 struct string_list list;
13}; 19};
@@ -280,16 +286,16 @@ void print_combined_authorrow(struct string_list *authors, int from, int to,
280 authorstat = author->util; 286 authorstat = author->util;
281 items = &authorstat->list; 287 items = &authorstat->list;
282 date = string_list_lookup(items, tmp); 288 date = string_list_lookup(items, tmp);
283 if (date) 289 if (date)
284 subtotal += (size_t)date->util; 290 subtotal += (size_t)date->util;
285 } 291 }
286 htmlf("<td class='%s'>%d</td>", centerclass, subtotal); 292 htmlf("<td class='%s'>%ld</td>", centerclass, subtotal);
287 total += subtotal; 293 total += subtotal;
288 } 294 }
289 htmlf("<td class='%s'>%d</td></tr>", rightclass, total); 295 htmlf("<td class='%s'>%ld</td></tr>", rightclass, total);
290} 296}
291 297
292void print_authors(struct string_list *authors, int top, 298void print_authors(struct string_list *authors, int top,
293 struct cgit_period *period) 299 struct cgit_period *period)
294{ 300{
295 struct string_list_item *author; 301 struct string_list_item *author;
@@ -332,22 +338,22 @@ void print_authors(struct string_list *authors, int top,
332 tmp = period->pretty(tm); 338 tmp = period->pretty(tm);
333 period->inc(tm); 339 period->inc(tm);
334 date = string_list_lookup(items, tmp); 340 date = string_list_lookup(items, tmp);
335 if (!date) 341 if (!date)
336 html("<td>0</td>"); 342 html("<td>0</td>");
337 else { 343 else {
338 htmlf("<td>%d</td>", date->util); 344 htmlf("<td>"SZ_FMT"</td>", (size_t)date->util);
339 total += (size_t)date->util; 345 total += (size_t)date->util;
340 } 346 }
341 } 347 }
342 htmlf("<td class='sum'>%d</td></tr>", total); 348 htmlf("<td class='sum'>%ld</td></tr>", total);
343 } 349 }
344 350
345 if (top < authors->nr) 351 if (top < authors->nr)
346 print_combined_authorrow(authors, top, authors->nr - 1, 352 print_combined_authorrow(authors, top, authors->nr - 1,
347 "Others (%d)", "left", "", "sum", period); 353 "Others (%ld)", "left", "", "sum", period);
348 354
349 print_combined_authorrow(authors, 0, authors->nr - 1, "Total", 355 print_combined_authorrow(authors, 0, authors->nr - 1, "Total",
350 "total", "sum", "sum", period); 356 "total", "sum", "sum", period);
351 html("</table>"); 357 html("</table>");
352} 358}
353 359
@@ -364,13 +370,13 @@ void cgit_show_stats(struct cgit_context *ctx)
364 370
365 if (ctx->qry.period) 371 if (ctx->qry.period)
366 code = ctx->qry.period; 372 code = ctx->qry.period;
367 373
368 i = cgit_find_stats_period(code, &period); 374 i = cgit_find_stats_period(code, &period);
369 if (!i) { 375 if (!i) {
370 cgit_print_error(fmt("Unknown statistics type: %c", code)); 376 cgit_print_error(fmt("Unknown statistics type: %c", code[0]));
371 return; 377 return;
372 } 378 }
373 if (i > ctx->repo->max_stats) { 379 if (i > ctx->repo->max_stats) {
374 cgit_print_error(fmt("Statistics type disabled: %s", 380 cgit_print_error(fmt("Statistics type disabled: %s",
375 period->name)); 381 period->name));
376 return; 382 return;
diff --git a/ui-tree.c b/ui-tree.c
index 75ec9cb..0b1b531 100644
--- a/ui-tree.c
+++ b/ui-tree.c
@@ -43,13 +43,13 @@ static void print_text_buffer(const char *name, char *buf, unsigned long size)
43 } 43 }
44 44
45 if (ctx.repo->source_filter) { 45 if (ctx.repo->source_filter) {
46 html("<td class='lines'><pre><code>"); 46 html("<td class='lines'><pre><code>");
47 ctx.repo->source_filter->argv[1] = xstrdup(name); 47 ctx.repo->source_filter->argv[1] = xstrdup(name);
48 cgit_open_filter(ctx.repo->source_filter); 48 cgit_open_filter(ctx.repo->source_filter);
49 write(STDOUT_FILENO, buf, size); 49 html_raw(buf, size);
50 cgit_close_filter(ctx.repo->source_filter); 50 cgit_close_filter(ctx.repo->source_filter);
51 html("</code></pre></td></tr></table>\n"); 51 html("</code></pre></td></tr></table>\n");
52 return; 52 return;
53 } 53 }
54 54
55 html("<td class='lines'><pre><code>"); 55 html("<td class='lines'><pre><code>");
@@ -64,13 +64,13 @@ static void print_binary_buffer(char *buf, unsigned long size)
64 unsigned long ofs, idx; 64 unsigned long ofs, idx;
65 static char ascii[ROWLEN + 1]; 65 static char ascii[ROWLEN + 1];
66 66
67 html("<table summary='blob content' class='bin-blob'>\n"); 67 html("<table summary='blob content' class='bin-blob'>\n");
68 html("<tr><th>ofs</th><th>hex dump</th><th>ascii</th></tr>"); 68 html("<tr><th>ofs</th><th>hex dump</th><th>ascii</th></tr>");
69 for (ofs = 0; ofs < size; ofs += ROWLEN, buf += ROWLEN) { 69 for (ofs = 0; ofs < size; ofs += ROWLEN, buf += ROWLEN) {
70 htmlf("<tr><td class='right'>%04x</td><td class='hex'>", ofs); 70 htmlf("<tr><td class='right'>%04lx</td><td class='hex'>", ofs);
71 for (idx = 0; idx < ROWLEN && ofs + idx < size; idx++) 71 for (idx = 0; idx < ROWLEN && ofs + idx < size; idx++)
72 htmlf("%*s%02x", 72 htmlf("%*s%02x",
73 idx == 16 ? 4 : 1, "", 73 idx == 16 ? 4 : 1, "",
74 buf[idx] & 0xff); 74 buf[idx] & 0xff);
75 html(" </td><td class='hex'>"); 75 html(" </td><td class='hex'>");
76 for (idx = 0; idx < ROWLEN && ofs + idx < size; idx++) 76 for (idx = 0; idx < ROWLEN && ofs + idx < size; idx++)
@@ -105,13 +105,13 @@ static void print_object(const unsigned char *sha1, char *path, const char *base
105 htmlf("blob: %s (", sha1_to_hex(sha1)); 105 htmlf("blob: %s (", sha1_to_hex(sha1));
106 cgit_plain_link("plain", NULL, NULL, ctx.qry.head, 106 cgit_plain_link("plain", NULL, NULL, ctx.qry.head,
107 curr_rev, path); 107 curr_rev, path);
108 html(")\n"); 108 html(")\n");
109 109
110 if (ctx.cfg.max_blob_size && size / 1024 > ctx.cfg.max_blob_size) { 110 if (ctx.cfg.max_blob_size && size / 1024 > ctx.cfg.max_blob_size) {
111 htmlf("<div class='error'>blob size (%dKB) exceeds display size limit (%dKB).</div>", 111 htmlf("<div class='error'>blob size (%ldKB) exceeds display size limit (%dKB).</div>",
112 size / 1024, ctx.cfg.max_blob_size); 112 size / 1024, ctx.cfg.max_blob_size);
113 return; 113 return;
114 } 114 }
115 115
116 if (buffer_is_binary(buf, size)) 116 if (buffer_is_binary(buf, size))
117 print_binary_buffer(buf, size); 117 print_binary_buffer(buf, size);