add function to print a single line, ignoring \r and \n - stagit - static git page generator
 (HTM) git clone git://git.codemadness.org/stagit
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit 295e4b8cb95114bb74b582c7332bc4c171f36dd3
 (DIR) parent 995f7d5c5d8e396b06e70b1497ac96df63ffec36
 (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
       @@ -377,6 +377,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("&lt;",   fp); break;
       +                case '>':  fputs("&gt;",   fp); break;
       +                case '\'': fputs("&#39;",  fp); break;
       +                case '&':  fputs("&amp;",  fp); break;
       +                case '"':  fputs("&quot;", fp); break;
       +                case '\r': break; /* ignore CR */
       +                case '\n': break; /* ignore LF */
       +                default:   putc(*s, fp);
       +                }
       +        }
       +}
       +
        int
        mkdirp(const char *path)
        {
       @@ -678,7 +698,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);
                                }