From 567d80acbd99a5b8cbaa6d1fccd36837631f9718 Mon Sep 17 00:00:00 2001 From: Galin Simeonov Date: Mon, 27 Sep 2021 11:15:01 +0300 Subject: handling special chars in diff files --- git_part.c | 30 ++++++++++++++++++------------ 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/git_part.c b/git_part.c index 5d4ab8f..2102e85 100644 --- a/git_part.c +++ b/git_part.c @@ -2,6 +2,17 @@ #define VOLGIT_GIT_PART_C VOLGIT_GIT_PART_C #include +static const char *special_chars[256] + = + { + ['\"']=""", + ['\'']="'", + ['&']="&", + ['<']="<", + ['>']=">", + + }; + int print_diff_line(const git_diff_delta *delta,const git_diff_hunk *hunk,const git_diff_line *line,FILE *out) { size_t i; @@ -14,8 +25,13 @@ int print_diff_line(const git_diff_delta *delta,const git_diff_hunk *hunk,const fprintf(out,"%c ",line->origin); for(i=0;icontent_len;++i) - fprintf(out,"%c",line->content[i]); - + if(special_chars[line->content[i]]) + { + fwrite(special_chars[line->content[i]],1,strlen(special_chars[line->content[i]]),out); + }else + { + fwrite(line->content+i,1,1,out); + } fprintf(out,""); return 0; @@ -208,16 +224,6 @@ int print_entry(FILE *index_file,const git_tree_entry *entry,int base_dir_fd,git size_t i; git_blob *blob; - static const char *special_chars[256] - = - { - ['\"']=""", - ['\'']="'", - ['&']="&", - ['<']="<", - ['>']=">", - - }; blob=(git_blob*)obj; -- cgit v1.2.3