mirror of
https://git.zx2c4.com/cgit
synced 2024-11-22 08:28:42 +00:00
Merge branch 'ml/bugfix'
This commit is contained in:
commit
a9d6e6e695
8
Makefile
8
Makefile
@ -16,6 +16,11 @@ INSTALL = install
|
|||||||
#
|
#
|
||||||
# Define NEEDS_LIBICONV if linking with libc is not enough (eg. Darwin).
|
# 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
|
#-include config.mak
|
||||||
|
|
||||||
@ -127,6 +132,9 @@ endif
|
|||||||
ifdef NO_STRCASESTR
|
ifdef NO_STRCASESTR
|
||||||
CFLAGS += -DNO_STRCASESTR
|
CFLAGS += -DNO_STRCASESTR
|
||||||
endif
|
endif
|
||||||
|
ifdef NO_C99_FORMAT
|
||||||
|
CFLAGS += -DNO_C99_FORMAT
|
||||||
|
endif
|
||||||
ifdef NO_OPENSSL
|
ifdef NO_OPENSSL
|
||||||
CFLAGS += -DNO_OPENSSL
|
CFLAGS += -DNO_OPENSSL
|
||||||
GIT_OPTIONS += NO_OPENSSL=1
|
GIT_OPTIONS += NO_OPENSSL=1
|
||||||
|
1
cache.h
1
cache.h
@ -30,6 +30,7 @@ extern int cache_process(int size, const char *path, const char *key, int ttl,
|
|||||||
extern int cache_ls(const char *path);
|
extern int cache_ls(const char *path);
|
||||||
|
|
||||||
/* Print a message to stdout */
|
/* Print a message to stdout */
|
||||||
|
__attribute__((format (printf,1,2)))
|
||||||
extern void cache_log(const char *format, ...);
|
extern void cache_log(const char *format, ...);
|
||||||
|
|
||||||
extern unsigned long hash_str(const char *str);
|
extern unsigned long hash_str(const char *str);
|
||||||
|
2
cgit.c
2
cgit.c
@ -610,7 +610,7 @@ static void process_cached_repolist(const char *path)
|
|||||||
hash = hash_str(path);
|
hash = hash_str(path);
|
||||||
if (ctx.cfg.project_list)
|
if (ctx.cfg.project_list)
|
||||||
hash += hash_str(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)) {
|
if (stat(cached_rc, &st)) {
|
||||||
/* Nothing is cached, we need to scan without forking. And
|
/* Nothing is cached, we need to scan without forking. And
|
||||||
|
1
cgit.h
1
cgit.h
@ -295,6 +295,7 @@ extern void cgit_diff_tree(const unsigned char *old_sha1,
|
|||||||
|
|
||||||
extern void cgit_diff_commit(struct commit *commit, filepair_fn fn);
|
extern void cgit_diff_commit(struct commit *commit, filepair_fn fn);
|
||||||
|
|
||||||
|
__attribute__((format (printf,1,2)))
|
||||||
extern char *fmt(const char *format,...);
|
extern char *fmt(const char *format,...);
|
||||||
|
|
||||||
extern struct commitinfo *cgit_parse_commit(struct commit *commit);
|
extern struct commitinfo *cgit_parse_commit(struct commit *commit);
|
||||||
|
18
html.c
18
html.c
@ -95,7 +95,7 @@ void html_txt(const char *txt)
|
|||||||
while(t && *t){
|
while(t && *t){
|
||||||
int c = *t;
|
int c = *t;
|
||||||
if (c=='<' || c=='>' || c=='&') {
|
if (c=='<' || c=='>' || c=='&') {
|
||||||
write(htmlfd, txt, t - txt);
|
html_raw(txt, t - txt);
|
||||||
if (c=='>')
|
if (c=='>')
|
||||||
html(">");
|
html(">");
|
||||||
else if (c=='<')
|
else if (c=='<')
|
||||||
@ -116,7 +116,7 @@ void html_ntxt(int len, const char *txt)
|
|||||||
while(t && *t && len--){
|
while(t && *t && len--){
|
||||||
int c = *t;
|
int c = *t;
|
||||||
if (c=='<' || c=='>' || c=='&') {
|
if (c=='<' || c=='>' || c=='&') {
|
||||||
write(htmlfd, txt, t - txt);
|
html_raw(txt, t - txt);
|
||||||
if (c=='>')
|
if (c=='>')
|
||||||
html(">");
|
html(">");
|
||||||
else if (c=='<')
|
else if (c=='<')
|
||||||
@ -128,7 +128,7 @@ void html_ntxt(int len, const char *txt)
|
|||||||
t++;
|
t++;
|
||||||
}
|
}
|
||||||
if (t!=txt)
|
if (t!=txt)
|
||||||
write(htmlfd, txt, t - txt);
|
html_raw(txt, t - txt);
|
||||||
if (len<0)
|
if (len<0)
|
||||||
html("...");
|
html("...");
|
||||||
}
|
}
|
||||||
@ -139,7 +139,7 @@ void html_attr(const char *txt)
|
|||||||
while(t && *t){
|
while(t && *t){
|
||||||
int c = *t;
|
int c = *t;
|
||||||
if (c=='<' || c=='>' || c=='\'' || c=='\"') {
|
if (c=='<' || c=='>' || c=='\'' || c=='\"') {
|
||||||
write(htmlfd, txt, t - txt);
|
html_raw(txt, t - txt);
|
||||||
if (c=='>')
|
if (c=='>')
|
||||||
html(">");
|
html(">");
|
||||||
else if (c=='<')
|
else if (c=='<')
|
||||||
@ -163,8 +163,8 @@ void html_url_path(const char *txt)
|
|||||||
int c = *t;
|
int c = *t;
|
||||||
const char *e = url_escape_table[c];
|
const char *e = url_escape_table[c];
|
||||||
if (e && c!='+' && c!='&' && c!='+') {
|
if (e && c!='+' && c!='&' && c!='+') {
|
||||||
write(htmlfd, txt, t - txt);
|
html_raw(txt, t - txt);
|
||||||
write(htmlfd, e, 3);
|
html_raw(e, 3);
|
||||||
txt = t+1;
|
txt = t+1;
|
||||||
}
|
}
|
||||||
t++;
|
t++;
|
||||||
@ -180,8 +180,8 @@ void html_url_arg(const char *txt)
|
|||||||
int c = *t;
|
int c = *t;
|
||||||
const char *e = url_escape_table[c];
|
const char *e = url_escape_table[c];
|
||||||
if (e) {
|
if (e) {
|
||||||
write(htmlfd, txt, t - txt);
|
html_raw(txt, t - txt);
|
||||||
write(htmlfd, e, 3);
|
html_raw(e, 3);
|
||||||
txt = t+1;
|
txt = t+1;
|
||||||
}
|
}
|
||||||
t++;
|
t++;
|
||||||
@ -249,7 +249,7 @@ int html_include(const char *filename)
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
while((len = fread(buf, 1, 4096, f)) > 0)
|
while((len = fread(buf, 1, 4096, f)) > 0)
|
||||||
write(htmlfd, buf, len);
|
html_raw(buf, len);
|
||||||
fclose(f);
|
fclose(f);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
3
html.h
3
html.h
@ -5,7 +5,10 @@ extern int htmlfd;
|
|||||||
|
|
||||||
extern void html_raw(const char *txt, size_t size);
|
extern void html_raw(const char *txt, size_t size);
|
||||||
extern void html(const char *txt);
|
extern void html(const char *txt);
|
||||||
|
|
||||||
|
__attribute__((format (printf,1,2)))
|
||||||
extern void htmlf(const char *format,...);
|
extern void htmlf(const char *format,...);
|
||||||
|
|
||||||
extern void html_status(int code, const char *msg, int more_headers);
|
extern void html_status(int code, const char *msg, int more_headers);
|
||||||
extern void html_txt(const char *txt);
|
extern void html_txt(const char *txt);
|
||||||
extern void html_ntxt(int len, const char *txt);
|
extern void html_ntxt(int len, const char *txt);
|
||||||
|
@ -52,7 +52,7 @@ int cgit_print_file(char *path, const char *head)
|
|||||||
if (!buf)
|
if (!buf)
|
||||||
return -1;
|
return -1;
|
||||||
buf[size] = '\0';
|
buf[size] = '\0';
|
||||||
write(htmlfd, buf, size);
|
html_raw(buf, size);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -108,5 +108,5 @@ void cgit_print_blob(const char *hex, char *path, const char *head)
|
|||||||
}
|
}
|
||||||
ctx.page.filename = path;
|
ctx.page.filename = path;
|
||||||
cgit_print_http_headers(&ctx);
|
cgit_print_http_headers(&ctx);
|
||||||
write(htmlfd, buf, size);
|
html_raw(buf, size);
|
||||||
}
|
}
|
||||||
|
@ -92,7 +92,7 @@ static void print_fileinfo(struct fileinfo *info)
|
|||||||
info->old_path);
|
info->old_path);
|
||||||
html("</td><td class='right'>");
|
html("</td><td class='right'>");
|
||||||
if (info->binary) {
|
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);
|
info->old_size, info->new_size);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
3
ui-log.c
3
ui-log.c
@ -228,8 +228,7 @@ void cgit_print_log(const char *tip, int ofs, int cnt, char *grep, char *pattern
|
|||||||
commit->parents = NULL;
|
commit->parents = NULL;
|
||||||
}
|
}
|
||||||
if (pager) {
|
if (pager) {
|
||||||
htmlf("</table><div class='pager'>",
|
html("</table><div class='pager'>");
|
||||||
columns);
|
|
||||||
if (ofs > 0) {
|
if (ofs > 0) {
|
||||||
cgit_log_link("[prev]", NULL, NULL, ctx.qry.head,
|
cgit_log_link("[prev]", NULL, NULL, ctx.qry.head,
|
||||||
ctx.qry.sha1, ctx.qry.vpath,
|
ctx.qry.sha1, ctx.qry.vpath,
|
||||||
|
@ -6,12 +6,6 @@
|
|||||||
* (see COPYING for full license text)
|
* (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 "cgit.h"
|
||||||
#include "html.h"
|
#include "html.h"
|
||||||
#include "ui-shared.h"
|
#include "ui-shared.h"
|
||||||
|
18
ui-stats.c
18
ui-stats.c
@ -5,6 +5,12 @@
|
|||||||
#include "ui-shared.h"
|
#include "ui-shared.h"
|
||||||
#include "ui-stats.h"
|
#include "ui-stats.h"
|
||||||
|
|
||||||
|
#ifdef NO_C99_FORMAT
|
||||||
|
#define SZ_FMT "%u"
|
||||||
|
#else
|
||||||
|
#define SZ_FMT "%zu"
|
||||||
|
#endif
|
||||||
|
|
||||||
#define MONTHS 6
|
#define MONTHS 6
|
||||||
|
|
||||||
struct authorstat {
|
struct authorstat {
|
||||||
@ -283,10 +289,10 @@ void print_combined_authorrow(struct string_list *authors, int from, int to,
|
|||||||
if (date)
|
if (date)
|
||||||
subtotal += (size_t)date->util;
|
subtotal += (size_t)date->util;
|
||||||
}
|
}
|
||||||
htmlf("<td class='%s'>%d</td>", centerclass, subtotal);
|
htmlf("<td class='%s'>%ld</td>", centerclass, subtotal);
|
||||||
total += 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,
|
void print_authors(struct string_list *authors, int top,
|
||||||
@ -335,16 +341,16 @@ void print_authors(struct string_list *authors, int top,
|
|||||||
if (!date)
|
if (!date)
|
||||||
html("<td>0</td>");
|
html("<td>0</td>");
|
||||||
else {
|
else {
|
||||||
htmlf("<td>%d</td>", date->util);
|
htmlf("<td>"SZ_FMT"</td>", (size_t)date->util);
|
||||||
total += (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)
|
if (top < authors->nr)
|
||||||
print_combined_authorrow(authors, top, authors->nr - 1,
|
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",
|
print_combined_authorrow(authors, 0, authors->nr - 1, "Total",
|
||||||
"total", "sum", "sum", period);
|
"total", "sum", "sum", period);
|
||||||
@ -367,7 +373,7 @@ void cgit_show_stats(struct cgit_context *ctx)
|
|||||||
|
|
||||||
i = cgit_find_stats_period(code, &period);
|
i = cgit_find_stats_period(code, &period);
|
||||||
if (!i) {
|
if (!i) {
|
||||||
cgit_print_error(fmt("Unknown statistics type: %c", code));
|
cgit_print_error(fmt("Unknown statistics type: %c", code[0]));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (i > ctx->repo->max_stats) {
|
if (i > ctx->repo->max_stats) {
|
||||||
|
@ -46,7 +46,7 @@ static void print_text_buffer(const char *name, char *buf, unsigned long size)
|
|||||||
html("<td class='lines'><pre><code>");
|
html("<td class='lines'><pre><code>");
|
||||||
ctx.repo->source_filter->argv[1] = xstrdup(name);
|
ctx.repo->source_filter->argv[1] = xstrdup(name);
|
||||||
cgit_open_filter(ctx.repo->source_filter);
|
cgit_open_filter(ctx.repo->source_filter);
|
||||||
write(STDOUT_FILENO, buf, size);
|
html_raw(buf, size);
|
||||||
cgit_close_filter(ctx.repo->source_filter);
|
cgit_close_filter(ctx.repo->source_filter);
|
||||||
html("</code></pre></td></tr></table>\n");
|
html("</code></pre></td></tr></table>\n");
|
||||||
return;
|
return;
|
||||||
@ -67,7 +67,7 @@ static void print_binary_buffer(char *buf, unsigned long size)
|
|||||||
html("<table summary='blob content' class='bin-blob'>\n");
|
html("<table summary='blob content' class='bin-blob'>\n");
|
||||||
html("<tr><th>ofs</th><th>hex dump</th><th>ascii</th></tr>");
|
html("<tr><th>ofs</th><th>hex dump</th><th>ascii</th></tr>");
|
||||||
for (ofs = 0; ofs < size; ofs += ROWLEN, buf += ROWLEN) {
|
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++)
|
for (idx = 0; idx < ROWLEN && ofs + idx < size; idx++)
|
||||||
htmlf("%*s%02x",
|
htmlf("%*s%02x",
|
||||||
idx == 16 ? 4 : 1, "",
|
idx == 16 ? 4 : 1, "",
|
||||||
@ -108,7 +108,7 @@ static void print_object(const unsigned char *sha1, char *path, const char *base
|
|||||||
html(")\n");
|
html(")\n");
|
||||||
|
|
||||||
if (ctx.cfg.max_blob_size && size / 1024 > ctx.cfg.max_blob_size) {
|
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);
|
size / 1024, ctx.cfg.max_blob_size);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user