OSDN Git Service

xdiff_gnudiff_compat.cpp: Fix an assertion failure when comparing files without EOL...
authorTakashi Sawanaka <sdottaka@users.sourceforge.net>
Mon, 24 Jun 2019 23:14:54 +0000 (08:14 +0900)
committerTakashi Sawanaka <sdottaka@users.sourceforge.net>
Mon, 24 Jun 2019 23:14:54 +0000 (08:14 +0900)
Src/xdiff_gnudiff_compat.cpp

index 865ceb4..15a68a4 100644 (file)
@@ -91,6 +91,13 @@ static void append_equivs(const xdfile_t& xdf, struct file_data& filevec, std::v
        }\r
 }\r
 \r
+static int is_missing_newline(const mmfile_t& mmfile)\r
+{\r
+       if (mmfile.size == 0 || mmfile.ptr[mmfile.size - 1] == '\r' || mmfile.ptr[mmfile.size - 1] == '\n')\r
+               return 0;\r
+       return 1;\r
+}\r
+\r
 struct change * diff_2_files_xdiff (struct file_data filevec[], int bMoved_blocks_flag, unsigned xdl_flags)\r
 {\r
        mmfile_t mmfile1 = { 0 }, mmfile2 = { 0 };\r
@@ -146,6 +153,8 @@ struct change * diff_2_files_xdiff (struct file_data filevec[], int bMoved_block
                }\r
                if (xe.xdf2.nrec > 0)\r
                        filevec[1].linbuf[xe.xdf2.nrec] = xe.xdf2.recs[xe.xdf2.nrec - 1]->ptr + xe.xdf2.recs[xe.xdf2.nrec - 1]->size;\r
+               filevec[0].missing_newline = is_missing_newline(mmfile1);\r
+               filevec[1].missing_newline = is_missing_newline(mmfile2);\r
 \r
                change *prev = nullptr;\r
                for (xdchange_t* xcur = xscr; xcur; xcur = xcur->next)\r