stagit

git site generator
Contents

add function to print a single line, ignoring \r and \n

This can happen when there is no newline at end of file in the diff which is
served by libgit2 as:

"\n\ No newline at end of file\n".

Hiltjo Posthuma hiltjo@codemadness.org

commit: 0dbd5db parent: f4fd72b
1 files changed, 22 insertions(+), 1 deletions(-)
Mstagit.c+22-1
M · stagit.c +22, -1
 1@@ -377,6 +377,26 @@ xmlencode(FILE *fp, const char *s, size_t len)
 2 }
 3 }
 4
 5+/* Escape characters below as HTML 2.0 / XML 1.0, ignore printing '\n',
'\r' */
 6+void
 7+xmlencodeline(FILE
*fp, const char *s, size_t len)
 8+{
 9+ size_t i;
10+
11+ for (i = 0; *s
&& i < len; s++, i++) {
12+ switch(*s) {
13+ case
'<': fputs("&lt;", fp); break;
14+ case
'>': fputs("&gt;", fp); break;
15+ case
'\'': fputs("&#39;", fp); break;
16+ case
'&': fputs("&amp;", fp); break;
17+ case
'"': fputs("&quot;", fp); break;
18+ case
'\r': break; /* ignore CR */
19+ case
'\n': break; /* ignore LF */
20+ default: putc(*s,
fp);
21+ }
22+ }
23+}
24+
25 int
26 mkdirp(const char
*path)
27 {
28@@ -678,7 +698,8 @@ printshowfile(FILE *fp, struct commitinfo *ci)
29 i, j, k, i, j, k);
30 else
31 putc('
', fp);
32- xmlencode(fp, line->content, line->content_len);
33+ xmlencodeline(fp,
line->content, line->content_len);
34+
putc('\n', fp);
35 if (line->old_lineno == -1 ||
line->new_lineno == -1)
36
fputs("</a>", fp);
37 }