aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/diff.c
diff options
context:
space:
mode:
authorLewis Russell <lewis6991@gmail.com>2024-09-26 16:10:11 +0100
committerLewis Russell <lewis6991@gmail.com>2024-09-30 11:51:33 +0100
commitc65646c2474d22948c604168a68f6626a645d1d2 (patch)
treefcf8e49ae06878638e0dacc34e08d7892ccc8524 /src/nvim/diff.c
parent20251be15a4ad3f6e7016450ca3338d52b2f0951 (diff)
downloadrneovim-c65646c2474d22948c604168a68f6626a645d1d2.tar.gz
rneovim-c65646c2474d22948c604168a68f6626a645d1d2.tar.bz2
rneovim-c65646c2474d22948c604168a68f6626a645d1d2.zip
fix(diff): use mmfile_t in linematch
Problem: Linematch used to use strchr to navigate a string, however strchr does not supoprt embedded NULs. Solution: Use `mmfile_t` instead of `char *` in linematch and introduce `strnchr()`. Also remove heap allocations from `matching_char_iwhite()` Fixes: #30505
Diffstat (limited to 'src/nvim/diff.c')
-rw-r--r--src/nvim/diff.c6
1 files changed, 2 insertions, 4 deletions
diff --git a/src/nvim/diff.c b/src/nvim/diff.c
index 05e5bed50c..d22fb65827 100644
--- a/src/nvim/diff.c
+++ b/src/nvim/diff.c
@@ -2005,7 +2005,7 @@ static void run_linematch_algorithm(diff_T *dp)
{
// define buffers for diff algorithm
mmfile_t diffbufs_mm[DB_COUNT];
- const char *diffbufs[DB_COUNT];
+ const mmfile_t *diffbufs[DB_COUNT];
int diff_length[DB_COUNT];
size_t ndiffs = 0;
for (int i = 0; i < DB_COUNT; i++) {
@@ -2015,9 +2015,7 @@ static void run_linematch_algorithm(diff_T *dp)
diff_write_buffer(curtab->tp_diffbuf[i], &diffbufs_mm[ndiffs],
dp->df_lnum[i], dp->df_lnum[i] + dp->df_count[i] - 1);
- // we want to get the char* to the diff buffer that was just written
- // we add it to the array of char*, diffbufs
- diffbufs[ndiffs] = diffbufs_mm[ndiffs].ptr;
+ diffbufs[ndiffs] = &diffbufs_mm[ndiffs];
// keep track of the length of this diff block to pass it to the linematch
// algorithm