Mercurial > vim
changeset 32104:5a1113ece237 v9.0.1383
patch 9.0.1383: xxd: combination of little endian and cols fails
Commit: https://github.com/vim/vim/commit/4390d872b6c9498527a43fc7c30a5384f2e1db12
Author: Bram Moolenaar <Bram@vim.org>
Date: Sun Mar 5 20:17:39 2023 +0000
patch 9.0.1383: xxd: combination of little endian and cols fails
Problem: xxd: combination of little endian and cols fails. (Aapo
Rantalainen)
Solution: Round up the space taken by the hex output. (closes #12097)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Sun, 05 Mar 2023 21:30:03 +0100 |
parents | 0ec8ebc433fd |
children | 2065b5d6a4eb |
files | src/testdir/test_xxd.vim src/version.c src/xxd/xxd.c |
diffstat | 3 files changed, 24 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/src/testdir/test_xxd.vim +++ b/src/testdir/test_xxd.vim @@ -401,4 +401,18 @@ func Test_xxd_plain_one_line() endfor endfunc +func Test_xxd_little_endian_with_cols() + enew! + call writefile(["ABCDEF"], 'Xxdin', 'D') + exe 'r! ' .. s:xxd_cmd .. ' -e -c6 ' .. ' Xxdin' + call assert_equal('00000000: 44434241 4645 ABCDEF', getline(2)) + + enew! + call writefile(["ABCDEFGHI"], 'Xxdin', 'D') + exe 'r! ' .. s:xxd_cmd .. ' -e -c9 ' .. ' Xxdin' + call assert_equal('00000000: 44434241 48474645 49 ABCDEFGHI', getline(2)) + + bwipe! +endfunc + " vim: shiftwidth=2 sts=2 expandtab
--- a/src/version.c +++ b/src/version.c @@ -696,6 +696,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 1383, +/**/ 1382, /**/ 1381,
--- a/src/xxd/xxd.c +++ b/src/xxd/xxd.c @@ -837,7 +837,8 @@ main(int argc, char *argv[]) { addrlen = sprintf(l, decimal_offset ? "%08ld:" : "%08lx:", ((unsigned long)(n + seekoff + displayoff))); - for (c = addrlen; c < LLEN; l[c++] = ' '); + for (c = addrlen; c < LLEN; l[c++] = ' ') + ; } x = hextype == HEX_LITTLEENDIAN ? p ^ (octspergrp-1) : p; c = addrlen + 1 + (grplen * x) / octspergrp; @@ -857,7 +858,12 @@ main(int argc, char *argv[]) if (ebcdic) e = (e < 64) ? '.' : etoa64[e-64]; /* When changing this update definition of LLEN above. */ - c = addrlen + 3 + (grplen * cols - 1)/octspergrp + p; + if (hextype == HEX_LITTLEENDIAN) + /* last group will be fully used, round up */ + c = grplen * ((cols + octspergrp - 1) / octspergrp); + else + c = (grplen * cols - 1) / octspergrp; + c += addrlen + 3 + p; l[c++] = #ifdef __MVS__ (e >= 64)