return 0;\r
}\r
\r
-struct change * diff_2_files_xdiff (struct file_data filevec[], int* bin_status, int bMoved_blocks_flag, int* bin_file, unsigned xdl_flags)\r
+struct change* diff_2_buffers_xdiff(const char* ptr1, size_t size1, const char* ptr2, size_t size2, unsigned xdl_flags)\r
{\r
- mmfile_t mmfile1 = { 0 }, mmfile2 = { 0 };\r
change *script = nullptr;\r
xdfenv_t xe;\r
xdchange_t *xscr;\r
xpparam_t xpp = { 0 };\r
xdemitconf_t xecfg = { 0 };\r
xdemitcb_t ecb = { 0 };\r
+ mmfile_t mmfile1 = { const_cast<char*>(ptr1), static_cast<long>(size1) };\r
+ mmfile_t mmfile2 = { const_cast<char*>(ptr2), static_cast<long>(size2) };\r
+\r
+ xpp.flags = xdl_flags;\r
+ xecfg.hunk_func = hunk_func;\r
+\r
+ if (xdl_diff_modified(&mmfile1, &mmfile2, &xpp, &xecfg, &ecb, &xe, &xscr) == 0)\r
+ {\r
+ change *prev = nullptr;\r
+ for (xdchange_t* xcur = xscr; xcur; xcur = xcur->next)\r
+ {\r
+ change* e = static_cast<change*>(malloc(sizeof(change)));\r
+ if (!e)\r
+ goto abort;\r
+ if (!script)\r
+ script = e;\r
+ e->line0 = xcur->i1;\r
+ e->line1 = xcur->i2;\r
+ e->deleted = xcur->chg1;\r
+ e->inserted = xcur->chg2;\r
+ e->match0 = -1;\r
+ e->match1 = -1;\r
+ e->trivial = static_cast<char>(xcur->ignore);\r
+ e->link = nullptr;\r
+ e->ignore = 0;\r
+ if (prev)\r
+ prev->link = e;\r
+ prev = e;\r
+ }\r
+\r
+ xdl_free_script(xscr);\r
+ xdl_free_env(&xe);\r
+ }\r
+\r
+ return script;\r
+\r
+abort:\r
+ return nullptr;\r
+}\r
+\r
+struct change * diff_2_files_xdiff (struct file_data filevec[], int* bin_status, int bMoved_blocks_flag, int* bin_file, unsigned xdl_flags)\r
+{\r
+ change *script = nullptr;\r
\r
if (read_files(filevec, no_details_flag & ~ignore_some_changes, bin_file))\r
{\r
}\r
else\r
{\r
- mmfile1.ptr = const_cast<char*>(filevec[0].prefix_end);\r
- mmfile1.size = static_cast<long>(filevec[0].suffix_begin - filevec[0].prefix_end);\r
- mmfile2.ptr = const_cast<char*>(filevec[1].prefix_end);\r
- mmfile2.size = static_cast<long>(filevec[1].suffix_begin - filevec[1].prefix_end);\r
-\r
- xpp.flags = xdl_flags;\r
- xecfg.hunk_func = hunk_func;\r
- if (xdl_diff_modified(&mmfile1, &mmfile2, &xpp, &xecfg, &ecb, &xe, &xscr) == 0)\r
- {\r
- change *prev = nullptr;\r
- for (xdchange_t* xcur = xscr; xcur; xcur = xcur->next)\r
- {\r
- change* e = static_cast<change*>(malloc(sizeof(change)));\r
- if (!e)\r
- goto abort;\r
- if (!script)\r
- script = e;\r
- e->line0 = xcur->i1;\r
- e->line1 = xcur->i2;\r
- e->deleted = xcur->chg1;\r
- e->inserted = xcur->chg2;\r
- e->match0 = -1;\r
- e->match1 = -1;\r
- e->trivial = static_cast<char>(xcur->ignore);\r
- e->link = nullptr;\r
- e->ignore = 0;\r
- if (prev)\r
- prev->link = e;\r
- prev = e;\r
- }\r
-\r
- if (bMoved_blocks_flag)\r
- moved_block_analysis(&script, filevec);\r
-\r
- xdl_free_script(xscr);\r
- xdl_free_env(&xe);\r
- }\r
+ script = diff_2_buffers_xdiff(\r
+ filevec[0].prefix_end,\r
+ filevec[0].suffix_begin - filevec[0].prefix_end,\r
+ filevec[1].prefix_end,\r
+ filevec[1].suffix_begin - filevec[1].prefix_end,\r
+ xdl_flags);\r
+ if (bMoved_blocks_flag)\r
+ moved_block_analysis(&script, filevec);\r
}\r
\r
return script;\r
-\r
-abort:\r
- return nullptr;\r
}\r