tadd function to print a single line, ignoring \r and \n - stagit - [fork] customized build of stagit, the static git page generator
(HTM) git clone git://src.adamsgaard.dk/stagit
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) README
(DIR) LICENSE
---
(DIR) commit d87119b82df29649c7dae1569af4777cfbaea236
(DIR) parent 3ac65c5b4288740388815867ad0d2d2997ec3c7a
(HTM) Author: Hiltjo Posthuma <hiltjo@codemadness.org>
Date: Thu, 25 Mar 2021 18:13:13 +0100
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".
Diffstat:
M stagit.c | 23 ++++++++++++++++++++++-
1 file changed, 22 insertions(+), 1 deletion(-)
---
(DIR) diff --git a/stagit.c b/stagit.c
t@@ -380,6 +380,26 @@ xmlencode(FILE *fp, const char *s, size_t len)
}
}
+/* Escape characters below as HTML 2.0 / XML 1.0, ignore printing '\n', '\r' */
+void
+xmlencodeline(FILE *fp, const char *s, size_t len)
+{
+ size_t i;
+
+ for (i = 0; *s && i < len; s++, i++) {
+ switch(*s) {
+ case '<': fputs("<", fp); break;
+ case '>': fputs(">", fp); break;
+ case '\'': fputs("'", fp); break;
+ case '&': fputs("&", fp); break;
+ case '"': fputs(""", fp); break;
+ case '\r': break; /* ignore CR */
+ case '\n': break; /* ignore LF */
+ default: putc(*s, fp);
+ }
+ }
+}
+
int
mkdirp(const char *path)
{
t@@ -691,7 +711,8 @@ printshowfile(FILE *fp, struct commitinfo *ci)
i, j, k, i, j, k);
else
putc(' ', fp);
- xmlencode(fp, line->content, line->content_len);
+ xmlencodeline(fp, line->content, line->content_len);
+ putc('\n', fp);
if (line->old_lineno == -1 || line->new_lineno == -1)
fputs("</a>", fp);
}