summaryrefslogtreecommitdiffabout
Side-by-side diff
Diffstat (more/less context) (show 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
#
# Define NO_OPENSSL to disable linking with OpenSSL and use bundled SHA1
# implementation (slower).
#
# Define NEEDS_LIBICONV if linking with libc is not enough (eg. Darwin).
#
+# Define NO_C99_FORMAT if your formatted IO functions (printf/scanf et.al.)
+# do not support the 'size specifiers' introduced by C99, namely ll, hh,
+# j, z, t. (representing long long int, char, intmax_t, size_t, ptrdiff_t).
+# some C compilers supported these specifiers prior to C99 as an extension.
+#
#-include config.mak
#
# Platform specific tweaks
#
@@ -124,12 +129,15 @@ CFLAGS += -DCGIT_CACHE_ROOT='"$(CACHE_ROOT)"'
ifdef NO_ICONV
CFLAGS += -DNO_ICONV
endif
ifdef NO_STRCASESTR
CFLAGS += -DNO_STRCASESTR
endif
+ifdef NO_C99_FORMAT
+ CFLAGS += -DNO_C99_FORMAT
+endif
ifdef NO_OPENSSL
CFLAGS += -DNO_OPENSSL
GIT_OPTIONS += NO_OPENSSL=1
else
EXTLIBS += -lcrypto
endif
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,
/* List info about all cache entries on stdout */
extern int cache_ls(const char *path);
/* Print a message to stdout */
+__attribute__((format (printf,1,2)))
extern void cache_log(const char *format, ...);
extern unsigned long hash_str(const char *str);
#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)
time_t age;
unsigned long hash;
hash = hash_str(path);
if (ctx.cfg.project_list)
hash += hash_str(ctx.cfg.project_list);
- cached_rc = xstrdup(fmt("%s/rc-%8x", ctx.cfg.cache_root, hash));
+ cached_rc = xstrdup(fmt("%s/rc-%8lx", ctx.cfg.cache_root, hash));
if (stat(cached_rc, &st)) {
/* Nothing is cached, we need to scan without forking. And
* if we fail to generate a cached repolist, we need to
* invoke scan_tree manually.
*/
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,
extern void cgit_diff_tree(const unsigned char *old_sha1,
const unsigned char *new_sha1,
filepair_fn fn, const char *prefix, int ignorews);
extern void cgit_diff_commit(struct commit *commit, filepair_fn fn);
+__attribute__((format (printf,1,2)))
extern char *fmt(const char *format,...);
extern struct commitinfo *cgit_parse_commit(struct commit *commit);
extern struct taginfo *cgit_parse_tag(struct tag *tag);
extern void cgit_parse_url(const char *url);
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)
void html_txt(const char *txt)
{
const char *t = txt;
while(t && *t){
int c = *t;
if (c=='<' || c=='>' || c=='&') {
- write(htmlfd, txt, t - txt);
+ html_raw(txt, t - txt);
if (c=='>')
html("&gt;");
else if (c=='<')
html("&lt;");
else if (c=='&')
html("&amp;");
@@ -113,36 +113,36 @@ void html_txt(const char *txt)
void html_ntxt(int len, const char *txt)
{
const char *t = txt;
while(t && *t && len--){
int c = *t;
if (c=='<' || c=='>' || c=='&') {
- write(htmlfd, txt, t - txt);
+ html_raw(txt, t - txt);
if (c=='>')
html("&gt;");
else if (c=='<')
html("&lt;");
else if (c=='&')
html("&amp;");
txt = t+1;
}
t++;
}
if (t!=txt)
- write(htmlfd, txt, t - txt);
+ html_raw(txt, t - txt);
if (len<0)
html("...");
}
void html_attr(const char *txt)
{
const char *t = txt;
while(t && *t){
int c = *t;
if (c=='<' || c=='>' || c=='\'' || c=='\"') {
- write(htmlfd, txt, t - txt);
+ html_raw(txt, t - txt);
if (c=='>')
html("&gt;");
else if (c=='<')
html("&lt;");
else if (c=='\'')
html("&#x27;");
@@ -160,14 +160,14 @@ void html_url_path(const char *txt)
{
const char *t = txt;
while(t && *t){
int c = *t;
const char *e = url_escape_table[c];
if (e && c!='+' && c!='&' && c!='+') {
- write(htmlfd, txt, t - txt);
- write(htmlfd, e, 3);
+ html_raw(txt, t - txt);
+ html_raw(e, 3);
txt = t+1;
}
t++;
}
if (t!=txt)
html(txt);
@@ -177,14 +177,14 @@ void html_url_arg(const char *txt)
{
const char *t = txt;
while(t && *t){
int c = *t;
const char *e = url_escape_table[c];
if (e) {
- write(htmlfd, txt, t - txt);
- write(htmlfd, e, 3);
+ html_raw(txt, t - txt);
+ html_raw(e, 3);
txt = t+1;
}
t++;
}
if (t!=txt)
html(txt);
@@ -246,13 +246,13 @@ int html_include(const char *filename)
if (!(f = fopen(filename, "r"))) {
fprintf(stderr, "[cgit] Failed to include file %s: %s (%d).\n",
filename, strerror(errno), errno);
return -1;
}
while((len = fread(buf, 1, 4096, f)) > 0)
- write(htmlfd, buf, len);
+ html_raw(buf, len);
fclose(f);
return 0;
}
int hextoint(char c)
{
diff --git a/html.h b/html.h
index 16d55ec..1135fb8 100644
--- a/html.h
+++ b/html.h
@@ -2,13 +2,16 @@
#define HTML_H
extern int htmlfd;
extern void html_raw(const char *txt, size_t size);
extern void html(const char *txt);
+
+__attribute__((format (printf,1,2)))
extern void htmlf(const char *format,...);
+
extern void html_status(int code, const char *msg, int more_headers);
extern void html_txt(const char *txt);
extern void html_ntxt(int len, const char *txt);
extern void html_attr(const char *txt);
extern void html_url_path(const char *txt);
extern 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)
if (type == OBJ_BAD)
return -1;
buf = read_sha1_file(sha1, &type, &size);
if (!buf)
return -1;
buf[size] = '\0';
- write(htmlfd, buf, size);
+ html_raw(buf, size);
return 0;
}
void cgit_print_blob(const char *hex, char *path, const char *head)
{
unsigned char sha1[20];
@@ -105,8 +105,8 @@ void cgit_print_blob(const char *hex, char *path, const char *head)
ctx.page.mimetype = "application/octet-stream";
else
ctx.page.mimetype = "text/plain";
}
ctx.page.filename = path;
cgit_print_http_headers(&ctx);
- write(htmlfd, buf, size);
+ html_raw(buf, size);
}
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)
if (info->status == DIFF_STATUS_COPIED || info->status == DIFF_STATUS_RENAMED)
htmlf(" (%s from %s)",
info->status == DIFF_STATUS_COPIED ? "copied" : "renamed",
info->old_path);
html("</td><td class='right'>");
if (info->binary) {
- htmlf("bin</td><td class='graph'>%d -> %d bytes",
+ htmlf("bin</td><td class='graph'>%ld -> %ld bytes",
info->old_size, info->new_size);
return;
}
htmlf("%d", info->added + info->removed);
html("</td><td class='graph'>");
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
free(commit->buffer);
commit->buffer = NULL;
free_commit_list(commit->parents);
commit->parents = NULL;
}
if (pager) {
- htmlf("</table><div class='pager'>",
- columns);
+ html("</table><div class='pager'>");
if (ofs > 0) {
cgit_log_link("[prev]", NULL, NULL, ctx.qry.head,
ctx.qry.sha1, ctx.qry.vpath,
ofs - cnt, ctx.qry.grep,
ctx.qry.search, ctx.qry.showmsg);
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 @@
* Copyright (C) 2006 Lars Hjemli
*
* Licensed under GNU General Public License v2
* (see COPYING for full license text)
*/
-/* This is needed for strcasestr to be defined by <string.h> */
-#define _GNU_SOURCE 1
-#include <string.h>
-
-#include <time.h>
-
#include "cgit.h"
#include "html.h"
#include "ui-shared.h"
time_t read_agefile(char *path)
{
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 @@
#include "cgit.h"
#include "html.h"
#include "ui-shared.h"
#include "ui-stats.h"
+#ifdef NO_C99_FORMAT
+#define SZ_FMT "%u"
+#else
+#define SZ_FMT "%zu"
+#endif
+
#define MONTHS 6
struct authorstat {
long total;
struct string_list list;
};
@@ -280,16 +286,16 @@ void print_combined_authorrow(struct string_list *authors, int from, int to,
authorstat = author->util;
items = &authorstat->list;
date = string_list_lookup(items, tmp);
if (date)
subtotal += (size_t)date->util;
}
- htmlf("<td class='%s'>%d</td>", centerclass, subtotal);
+ htmlf("<td class='%s'>%ld</td>", centerclass, subtotal);
total += subtotal;
}
- htmlf("<td class='%s'>%d</td></tr>", rightclass, total);
+ htmlf("<td class='%s'>%ld</td></tr>", rightclass, total);
}
void print_authors(struct string_list *authors, int top,
struct cgit_period *period)
{
struct string_list_item *author;
@@ -332,22 +338,22 @@ void print_authors(struct string_list *authors, int top,
tmp = period->pretty(tm);
period->inc(tm);
date = string_list_lookup(items, tmp);
if (!date)
html("<td>0</td>");
else {
- htmlf("<td>%d</td>", date->util);
+ htmlf("<td>"SZ_FMT"</td>", (size_t)date->util);
total += (size_t)date->util;
}
}
- htmlf("<td class='sum'>%d</td></tr>", total);
+ htmlf("<td class='sum'>%ld</td></tr>", total);
}
if (top < authors->nr)
print_combined_authorrow(authors, top, authors->nr - 1,
- "Others (%d)", "left", "", "sum", period);
+ "Others (%ld)", "left", "", "sum", period);
print_combined_authorrow(authors, 0, authors->nr - 1, "Total",
"total", "sum", "sum", period);
html("</table>");
}
@@ -364,13 +370,13 @@ void cgit_show_stats(struct cgit_context *ctx)
if (ctx->qry.period)
code = ctx->qry.period;
i = cgit_find_stats_period(code, &period);
if (!i) {
- cgit_print_error(fmt("Unknown statistics type: %c", code));
+ cgit_print_error(fmt("Unknown statistics type: %c", code[0]));
return;
}
if (i > ctx->repo->max_stats) {
cgit_print_error(fmt("Statistics type disabled: %s",
period->name));
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)
}
if (ctx.repo->source_filter) {
html("<td class='lines'><pre><code>");
ctx.repo->source_filter->argv[1] = xstrdup(name);
cgit_open_filter(ctx.repo->source_filter);
- write(STDOUT_FILENO, buf, size);
+ html_raw(buf, size);
cgit_close_filter(ctx.repo->source_filter);
html("</code></pre></td></tr></table>\n");
return;
}
html("<td class='lines'><pre><code>");
@@ -64,13 +64,13 @@ 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 += ROWLEN, buf += ROWLEN) {
- htmlf("<tr><td class='right'>%04x</td><td class='hex'>", ofs);
+ htmlf("<tr><td class='right'>%04lx</td><td class='hex'>", ofs);
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 < ROWLEN && ofs + idx < size; idx++)
@@ -105,13 +105,13 @@ static void print_object(const unsigned char *sha1, char *path, const char *base
htmlf("blob: %s (", sha1_to_hex(sha1));
cgit_plain_link("plain", NULL, NULL, ctx.qry.head,
curr_rev, path);
html(")\n");
if (ctx.cfg.max_blob_size && size / 1024 > ctx.cfg.max_blob_size) {
- htmlf("<div class='error'>blob size (%dKB) exceeds display size limit (%dKB).</div>",
+ htmlf("<div class='error'>blob size (%ldKB) exceeds display size limit (%dKB).</div>",
size / 1024, ctx.cfg.max_blob_size);
return;
}
if (buffer_is_binary(buf, size))
print_binary_buffer(buf, size);