diff --git a/generators/poppler/synctex/patches/09-fix_path_comparison.diff b/generators/poppler/synctex/patches/09-fix_path_comparison.diff new file mode 100644 index 000000000..984a0a628 --- /dev/null +++ b/generators/poppler/synctex/patches/09-fix_path_comparison.diff @@ -0,0 +1,22 @@ +diff --git a/generators/poppler/synctex/synctex_parser_utils.c b/generators/poppler/synctex/synctex_parser_utils.c +index 3be45b7..3dd764f 100644 +--- a/generators/poppler/synctex/synctex_parser_utils.c ++++ b/generators/poppler/synctex/synctex_parser_utils.c +@@ -199,7 +199,16 @@ next_character: + ++rhs; + goto next_character; + # else +- return 0 == strcmp(lhs,rhs)?synctex_YES:synctex_NO; ++ if (lhs[0] == '/' && rhs[0] == '/') { /* for absolute paths compare the real paths */ ++ char *lhsreal = realpath(lhs, 0); ++ char *rhsreal = realpath(rhs, 0); ++ synctex_bool_t result = lhsreal && rhsreal && 0 == strcmp(lhsreal,rhsreal)?synctex_YES:synctex_NO; ++ free (lhsreal); ++ free (rhsreal); ++ return result; ++ } else { ++ return 0 == strcmp(lhs,rhs)?synctex_YES:synctex_NO; ++ } + # endif + } + diff --git a/generators/poppler/synctex/patches/series b/generators/poppler/synctex/patches/series index f8e3ddf2a..7497c5244 100644 --- a/generators/poppler/synctex/patches/series +++ b/generators/poppler/synctex/patches/series @@ -5,3 +5,4 @@ 06-mingw-_synctex_error.diff 07-synctex_scanner_new_with_output_file-reset-mode.diff 08-fix_cpp_comments.diff +09-fix_path_comparison.diff diff --git a/generators/poppler/synctex/synctex_parser_utils.c b/generators/poppler/synctex/synctex_parser_utils.c index 3be45b7da..3dd764fb8 100644 --- a/generators/poppler/synctex/synctex_parser_utils.c +++ b/generators/poppler/synctex/synctex_parser_utils.c @@ -199,7 +199,16 @@ next_character: ++rhs; goto next_character; # else - return 0 == strcmp(lhs,rhs)?synctex_YES:synctex_NO; + if (lhs[0] == '/' && rhs[0] == '/') { /* for absolute paths compare the real paths */ + char *lhsreal = realpath(lhs, 0); + char *rhsreal = realpath(rhs, 0); + synctex_bool_t result = lhsreal && rhsreal && 0 == strcmp(lhsreal,rhsreal)?synctex_YES:synctex_NO; + free (lhsreal); + free (rhsreal); + return result; + } else { + return 0 == strcmp(lhs,rhs)?synctex_YES:synctex_NO; + } # endif }