patch 9.1.0793: xxd: -e does add one extra space
Problem: xxd: -e does add one extra space
Solution: fix it, refactor and merge some code
(Aapo Rantalainen)
fixes: #15898
closes: #15899
Signed-off-by: Aapo Rantalainen <aapo.rantalainen@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
diff --git a/src/testdir/test_xxd.vim b/src/testdir/test_xxd.vim
index 5706871..f10c244 100644
--- a/src/testdir/test_xxd.vim
+++ b/src/testdir/test_xxd.vim
@@ -485,12 +485,12 @@
enew!
call writefile(["ABCDEF"], 'Xxdin', 'D')
exe 'r! ' .. s:xxd_cmd .. ' -e -c6 ' .. ' Xxdin'
- call assert_equal('00000000: 44434241 4645 ABCDEF', getline(2))
+ 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))
+ call assert_equal('00000000: 44434241 48474645 49 ABCDEFGHI', getline(2))
bwipe!
endfunc
diff --git a/src/version.c b/src/version.c
index 93187e8..8c389ff 100644
--- a/src/version.c
+++ b/src/version.c
@@ -705,6 +705,8 @@
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 793,
+/**/
792,
/**/
791,
diff --git a/src/xxd/xxd.c b/src/xxd/xxd.c
index 63f516c..b1050e9 100644
--- a/src/xxd/xxd.c
+++ b/src/xxd/xxd.c
@@ -64,6 +64,7 @@
* 10.02.2024 fix buffer-overflow when writing color output to buffer, #14003
* 10.05.2024 fix another buffer-overflow when writing colored output to buffer, #14738
* 10.09.2024 Support -b and -i together, #15661
+ * 19.10.2024 -e did add an extra space #15899
*
* (c) 1990-1998 by Juergen Weigert (jnweiger@gmail.com)
*
@@ -144,7 +145,7 @@
# endif
#endif
-char version[] = "xxd 2024-09-15 by Juergen Weigert et al.";
+char version[] = "xxd 2024-10-19 by Juergen Weigert et al.";
#ifdef WIN32
char osver[] = " (Win32)";
#else
@@ -1110,9 +1111,6 @@
else
c = addrlen + 3 + (grplen * cols - 1)/octspergrp + p*12;
- if (hextype == HEX_LITTLEENDIAN)
- c += 1;
-
COLOR_PROLOGUE
begin_coloring_char(l,&c,e,ebcdic);
#if defined(__MVS__) && __CHARSET_LIB == 0
@@ -1126,21 +1124,15 @@
l[c++] = (e > 31 && e < 127) ? e : '.';
#endif
COLOR_EPILOGUE
- n++;
- if (++p == cols)
- {
- l[c++] = '\n';
- l[c++] = '\0';
- xxdline(fpo, l, autoskip ? nonzero : 1);
- nonzero = 0;
- p = 0;
- }
}
else /*no colors*/
{
if (ebcdic)
e = (e < 64) ? '.' : etoa64[e-64];
+ if (hextype == HEX_LITTLEENDIAN)
+ c -= 1;
+
c += addrlen + 3 + p;
l[c++] =
#if defined(__MVS__) && __CHARSET_LIB == 0
@@ -1149,16 +1141,16 @@
(e > 31 && e < 127)
#endif
? e : '.';
- n++;
- if (++p == cols)
- {
- l[c++] = '\n';
- l[c] = '\0';
- xxdline(fpo, l, autoskip ? nonzero : 1);
- nonzero = 0;
- p = 0;
- }
}
+ n++;
+ if (++p == cols)
+ {
+ l[c++] = '\n';
+ l[c] = '\0';
+ xxdline(fpo, l, autoskip ? nonzero : 1);
+ nonzero = 0;
+ p = 0;
+ }
}
if (p)
{
@@ -1166,8 +1158,6 @@
l[c] = '\0';
if (color)
{
- c++;
-
x = p;
if (hextype == HEX_LITTLEENDIAN)
{