diff options
author | DungSaga <dungsaga@users.noreply.github.com> | 2021-10-22 12:55:42 +0100 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2021-10-22 12:55:42 +0100 |
commit | 47810464aa4f9edbf222c02a860a3ec560b0b7a1 (patch) | |
tree | e4e5a50a10b4bb9900338c7957702bbc52f96b11 | |
parent | 94e7d345c156a722bb161b73238c4ba1d27ec586 (diff) | |
download | vim-git-47810464aa4f9edbf222c02a860a3ec560b0b7a1.tar.gz |
patch 8.2.3552: xxd revert does not handle end of line correctlyv8.2.3552
Problem: Xxd revert does not handle end of line correctly.
Solution: Check for newline first. (closes #9034)
-rw-r--r-- | src/testdir/test_xxd.vim | 33 | ||||
-rw-r--r-- | src/version.c | 2 | ||||
-rw-r--r-- | src/xxd/xxd.c | 17 |
3 files changed, 45 insertions, 7 deletions
diff --git a/src/testdir/test_xxd.vim b/src/testdir/test_xxd.vim index 922c5ab3a..fec012212 100644 --- a/src/testdir/test_xxd.vim +++ b/src/testdir/test_xxd.vim @@ -213,6 +213,39 @@ func Test_xxd() call delete('XXDfile') endfunc +func Test_xxd_patch() + let cmd = 'silent !' .. s:xxd_cmd .. ' -r Xxxdin Xxxdfile; ' .. s:xxd_cmd .. ' -g1 Xxxdfile > Xxxdout' + call writefile(["2: 41 41", "8: 42 42"], 'Xxxdin') + call writefile(['::::::::'], 'Xxxdfile') + exe cmd + call assert_equal(['00000000: 3a 3a 41 41 3a 3a 3a 3a 42 42 ::AA::::BB'], readfile('Xxxdout')) + + call writefile(["2: 43 43 ", "8: 44 44"], 'Xxxdin') + exe cmd + call assert_equal(['00000000: 3a 3a 43 43 3a 3a 3a 3a 44 44 ::CC::::DD'], readfile('Xxxdout')) + + call writefile(["2: 45 45 ", "8: 46 46"], 'Xxxdin') + exe cmd + call assert_equal(['00000000: 3a 3a 45 45 3a 3a 3a 3a 46 46 ::EE::::FF'], readfile('Xxxdout')) + + call writefile(["2: 41 41", "08: 42 42"], 'Xxxdin') + call writefile(['::::::::'], 'Xxxdfile') + exe cmd + call assert_equal(['00000000: 3a 3a 41 41 3a 3a 3a 3a 42 42 ::AA::::BB'], readfile('Xxxdout')) + + call writefile(["2: 43 43 ", "09: 44 44"], 'Xxxdin') + exe cmd + call assert_equal(['00000000: 3a 3a 43 43 3a 3a 3a 3a 42 44 44 ::CC::::BDD'], readfile('Xxxdout')) + + call writefile(["2: 45 45 ", "0a: 46 46"], 'Xxxdin') + exe cmd + call assert_equal(['00000000: 3a 3a 45 45 3a 3a 3a 3a 42 44 46 46 ::EE::::BDFF'], readfile('Xxxdout')) + + call delete('Xxxdin') + call delete('Xxxdfile') + call delete('Xxxdout') +endfunc + " Various ways with wrong arguments that trigger the usage output. func Test_xxd_usage() for arg in ['-c', '-g', '-o', '-s', '-l', '-X', 'one two three'] diff --git a/src/version.c b/src/version.c index 75c35196b..01437619b 100644 --- a/src/version.c +++ b/src/version.c @@ -758,6 +758,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 3552, +/**/ 3551, /**/ 3550, diff --git a/src/xxd/xxd.c b/src/xxd/xxd.c index 749df435d..e9dab81fb 100644 --- a/src/xxd/xxd.c +++ b/src/xxd/xxd.c @@ -131,7 +131,7 @@ extern void perror __P((char *)); extern long int strtol(); extern long int ftell(); -char version[] = "xxd 2020-02-04 by Juergen Weigert et al."; +char version[] = "xxd 2021-10-22 by Juergen Weigert et al."; #ifdef WIN32 char osver[] = " (Win32)"; #else @@ -318,8 +318,7 @@ huntype( if (fflush(fpo) != 0) die(3); #ifdef TRY_SEEK - c = fseek(fpo, base_off + want_off - have_off, 1); - if (c >= 0) + if (fseek(fpo, base_off + want_off - have_off, 1) >= 0) have_off = base_off + want_off; #endif if (base_off + want_off < have_off) @@ -349,12 +348,16 @@ huntype( if (n1 < 0 && n2 < 0 && n3 < 0) { /* already stumbled into garbage, skip line, wait and see */ - if (!hextype) - want_off = 0; - while ((c = getc(fpi)) != '\n' && c != EOF) - ; + while (c != '\n' && c != EOF) + c = getc(fpi); if (c == EOF && ferror(fpi)) die(2); + } + if (c == '\n') + { + if (!hextype) + want_off = 0; + p = cols; ign_garb = 1; } } |