mirror of
https://github.com/vim/vim.git
synced 2025-10-17 07:44:28 -04:00
patch 9.1.0732: xxd: cannot use -b and -i together
Problem: xxd: cannot use -b and -i together (Irgendwer) Solution: implement the missing changes (Andre Chang) fixes: #15362 closes: #15661 Signed-off-by: Andre Chang <andre@augmentcode.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
committed by
Christian Brabandt
parent
5e95c8f637
commit
150227258d
@@ -63,8 +63,8 @@ Toggle autoskip: A single '*' replaces NUL-lines. Default off.
|
|||||||
Switch to bits (binary digits) dump, rather than hex dump.
|
Switch to bits (binary digits) dump, rather than hex dump.
|
||||||
This option writes octets as eight digits "1"s and "0"s instead of a normal
|
This option writes octets as eight digits "1"s and "0"s instead of a normal
|
||||||
hexadecimal dump. Each line is preceded by a line number in hexadecimal and
|
hexadecimal dump. Each line is preceded by a line number in hexadecimal and
|
||||||
followed by an ASCII (or EBCDIC) representation. The command line switches
|
followed by an ASCII (or EBCDIC) representation. The command line switch
|
||||||
\-p, \-i do not work with this mode.
|
\-p does not work with this mode. Can be combined with \-i.
|
||||||
.TP
|
.TP
|
||||||
.IR "\-c cols " | " \-cols cols"
|
.IR "\-c cols " | " \-cols cols"
|
||||||
Format
|
Format
|
||||||
@@ -109,7 +109,8 @@ Print a summary of available commands and exit. No hex dumping is performed.
|
|||||||
.TP
|
.TP
|
||||||
.IR \-i " | " \-include
|
.IR \-i " | " \-include
|
||||||
Output in C include file style. A complete static array definition is written
|
Output in C include file style. A complete static array definition is written
|
||||||
(named after the input file), unless xxd reads from stdin.
|
(named after the input file), unless xxd reads from stdin. Can be combined
|
||||||
|
with \-b.
|
||||||
.TP
|
.TP
|
||||||
.IR "\-l len " | " \-len len"
|
.IR "\-l len " | " \-len len"
|
||||||
Stop after writing
|
Stop after writing
|
||||||
|
@@ -1,7 +1,5 @@
|
|||||||
XXD(1) General Commands Manual XXD(1)
|
XXD(1) General Commands Manual XXD(1)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
NAME
|
NAME
|
||||||
xxd - make a hex dump or do the reverse.
|
xxd - make a hex dump or do the reverse.
|
||||||
|
|
||||||
@@ -23,9 +21,9 @@ OPTIONS
|
|||||||
outfile is given (or a `-' character is in its place), results are sent
|
outfile is given (or a `-' character is in its place), results are sent
|
||||||
to standard output.
|
to standard output.
|
||||||
|
|
||||||
Note that a "lazy" parser is used which does not check for more than
|
Note that a "lazy" parser is used which does not check for more than
|
||||||
the first option letter, unless the option is followed by a parameter.
|
the first option letter, unless the option is followed by a parameter.
|
||||||
Spaces between a single option letter and its parameter are optional.
|
Spaces between a single option letter and its parameter are optional.
|
||||||
Parameters to options can be specified in decimal, hexadecimal or octal
|
Parameters to options can be specified in decimal, hexadecimal or octal
|
||||||
notation. Thus -c8, -c 8, -c 010 and -cols 8 are all equivalent.
|
notation. Thus -c8, -c 8, -c 010 and -cols 8 are all equivalent.
|
||||||
|
|
||||||
@@ -34,19 +32,19 @@ OPTIONS
|
|||||||
|
|
||||||
-b | -bits
|
-b | -bits
|
||||||
Switch to bits (binary digits) dump, rather than hex dump. This
|
Switch to bits (binary digits) dump, rather than hex dump. This
|
||||||
option writes octets as eight digits "1"s and "0"s instead of a
|
option writes octets as eight digits "1"s and "0"s instead of a
|
||||||
normal hexadecimal dump. Each line is preceded by a line number
|
normal hexadecimal dump. Each line is preceded by a line number
|
||||||
in hexadecimal and followed by an ASCII (or EBCDIC) representa‐
|
in hexadecimal and followed by an ASCII (or EBCDIC) representa‐
|
||||||
tion. The command line switches -p, -i do not work with this
|
tion. The command line switch -p does not work with this mode.
|
||||||
mode.
|
Can be combined with -i.
|
||||||
|
|
||||||
-c cols | -cols cols
|
-c cols | -cols cols
|
||||||
Format <cols> octets per line. Default 16 (-i: 12, -ps: 30, -b:
|
Format <cols> octets per line. Default 16 (-i: 12, -ps: 30, -b:
|
||||||
6). Max 256. No maximum for -ps. With -ps, 0 results in one
|
6). Max 256. No maximum for -ps. With -ps, 0 results in one
|
||||||
long line of output.
|
long line of output.
|
||||||
|
|
||||||
-C | -capitalize
|
-C | -capitalize
|
||||||
Capitalize variable names in C include file style, when using
|
Capitalize variable names in C include file style, when using
|
||||||
-i.
|
-i.
|
||||||
|
|
||||||
-d show offset in decimal instead of hex.
|
-d show offset in decimal instead of hex.
|
||||||
@@ -56,46 +54,46 @@ OPTIONS
|
|||||||
to EBCDIC. This does not change the hexadecimal representation.
|
to EBCDIC. This does not change the hexadecimal representation.
|
||||||
The option is meaningless in combinations with -r, -p or -i.
|
The option is meaningless in combinations with -r, -p or -i.
|
||||||
|
|
||||||
-e Switch to little-endian hex dump. This option treats byte
|
-e Switch to little-endian hex dump. This option treats byte
|
||||||
groups as words in little-endian byte order. The default group‐
|
groups as words in little-endian byte order. The default group‐
|
||||||
ing of 4 bytes may be changed using -g. This option only ap‐
|
ing of 4 bytes may be changed using -g. This option only ap‐
|
||||||
plies to the hex dump, leaving the ASCII (or EBCDIC) representa‐
|
plies to the hex dump, leaving the ASCII (or EBCDIC) representa‐
|
||||||
tion unchanged. The command line switches -r, -p, -i do not
|
tion unchanged. The command line switches -r, -p, -i do not
|
||||||
work with this mode.
|
work with this mode.
|
||||||
|
|
||||||
-g bytes | -groupsize bytes
|
-g bytes | -groupsize bytes
|
||||||
Separate the output of every <bytes> bytes (two hex characters
|
Separate the output of every <bytes> bytes (two hex characters
|
||||||
or eight bit digits each) by a whitespace. Specify -g 0 to sup‐
|
or eight bit digits each) by a whitespace. Specify -g 0 to sup‐
|
||||||
press grouping. <Bytes> defaults to 2 in normal mode, 4 in lit‐
|
press grouping. <Bytes> defaults to 2 in normal mode, 4 in lit‐
|
||||||
tle-endian mode and 1 in bits mode. Grouping does not apply to
|
tle-endian mode and 1 in bits mode. Grouping does not apply to
|
||||||
PostScript or include style.
|
PostScript or include style.
|
||||||
|
|
||||||
-h | -help
|
-h | -help
|
||||||
Print a summary of available commands and exit. No hex dumping
|
Print a summary of available commands and exit. No hex dumping
|
||||||
is performed.
|
is performed.
|
||||||
|
|
||||||
-i | -include
|
-i | -include
|
||||||
Output in C include file style. A complete static array defini‐
|
Output in C include file style. A complete static array defini‐
|
||||||
tion is written (named after the input file), unless xxd reads
|
tion is written (named after the input file), unless xxd reads
|
||||||
from stdin.
|
from stdin. Can be combined with -b.
|
||||||
|
|
||||||
-l len | -len len
|
-l len | -len len
|
||||||
Stop after writing <len> octets.
|
Stop after writing <len> octets.
|
||||||
|
|
||||||
-n name | -name name
|
-n name | -name name
|
||||||
Override the variable name output when -i is used. The array is
|
Override the variable name output when -i is used. The array is
|
||||||
named name and the length is named name_len.
|
named name and the length is named name_len.
|
||||||
|
|
||||||
-o offset
|
-o offset
|
||||||
Add <offset> to the displayed file position.
|
Add <offset> to the displayed file position.
|
||||||
|
|
||||||
-p | -ps | -postscript | -plain
|
-p | -ps | -postscript | -plain
|
||||||
Output in PostScript continuous hex dump style. Also known as
|
Output in PostScript continuous hex dump style. Also known as
|
||||||
plain hex dump style.
|
plain hex dump style.
|
||||||
|
|
||||||
-r | -revert
|
-r | -revert
|
||||||
Reverse operation: convert (or patch) hex dump into binary. If
|
Reverse operation: convert (or patch) hex dump into binary. If
|
||||||
not writing to stdout, xxd writes into its output file without
|
not writing to stdout, xxd writes into its output file without
|
||||||
truncating it. Use the combination -r -p to read plain hexadeci‐
|
truncating it. Use the combination -r -p to read plain hexadeci‐
|
||||||
mal dumps without line number information and without a particu‐
|
mal dumps without line number information and without a particu‐
|
||||||
lar column layout. Additional whitespace and line breaks are al‐
|
lar column layout. Additional whitespace and line breaks are al‐
|
||||||
@@ -117,7 +115,7 @@ OPTIONS
|
|||||||
Start at <seek> bytes abs. (or rel.) infile offset. + indicates
|
Start at <seek> bytes abs. (or rel.) infile offset. + indicates
|
||||||
that the seek is relative to the current stdin file position
|
that the seek is relative to the current stdin file position
|
||||||
(meaningless when not reading from stdin). - indicates that the
|
(meaningless when not reading from stdin). - indicates that the
|
||||||
seek should be that many characters from the end of the input
|
seek should be that many characters from the end of the input
|
||||||
(or if combined with +: before the current stdin file position).
|
(or if combined with +: before the current stdin file position).
|
||||||
Without -s option, xxd starts at the current file position.
|
Without -s option, xxd starts at the current file position.
|
||||||
|
|
||||||
@@ -140,7 +138,7 @@ CAVEATS
|
|||||||
input line after reading enough columns of hexadecimal data (see option
|
input line after reading enough columns of hexadecimal data (see option
|
||||||
-c). This also means that changes to the printable ASCII (or EBCDIC)
|
-c). This also means that changes to the printable ASCII (or EBCDIC)
|
||||||
columns are always ignored. Reverting a plain (or PostScript) style hex
|
columns are always ignored. Reverting a plain (or PostScript) style hex
|
||||||
dump with xxd -r -p does not depend on the correct number of columns.
|
dump with xxd -r -p does not depend on the correct number of columns.
|
||||||
Here, anything that looks like a pair of hex digits is interpreted.
|
Here, anything that looks like a pair of hex digits is interpreted.
|
||||||
|
|
||||||
Note the difference between
|
Note the difference between
|
||||||
@@ -148,7 +146,7 @@ CAVEATS
|
|||||||
and
|
and
|
||||||
% xxd -i < file
|
% xxd -i < file
|
||||||
|
|
||||||
xxd -s +seek may be different from xxd -s seek, as lseek(2) is used to
|
xxd -s +seek may be different from xxd -s seek, as lseek(2) is used to
|
||||||
"rewind" input. A '+' makes a difference if the input source is stdin,
|
"rewind" input. A '+' makes a difference if the input source is stdin,
|
||||||
and if stdin's file position is not at the start of the file by the
|
and if stdin's file position is not at the start of the file by the
|
||||||
time xxd is started and given its input. The following examples may
|
time xxd is started and given its input. The following examples may
|
||||||
@@ -161,7 +159,7 @@ CAVEATS
|
|||||||
Hex dump from file position 0x480 (=1024+128) onwards. The `+' sign
|
Hex dump from file position 0x480 (=1024+128) onwards. The `+' sign
|
||||||
means "relative to the current position", thus the `128' adds to the 1k
|
means "relative to the current position", thus the `128' adds to the 1k
|
||||||
where dd left off.
|
where dd left off.
|
||||||
% sh -c "dd of=plain_snippet bs=1k count=1; xxd -s +128 > hex_snippet"
|
% sh -c "dd of=plain_snippet bs=1k count=1; xxd -s +128 > hex_snippet"
|
||||||
< file
|
< file
|
||||||
|
|
||||||
Hex dump from file position 0x100 (=1024-768) onwards.
|
Hex dump from file position 0x100 (=1024-768) onwards.
|
||||||
@@ -179,7 +177,7 @@ EXAMPLES
|
|||||||
Print 3 lines (hex 0x30 bytes) from the end of file.
|
Print 3 lines (hex 0x30 bytes) from the end of file.
|
||||||
% xxd -s -0x30 file
|
% xxd -s -0x30 file
|
||||||
|
|
||||||
Note: The results of the examples below are relevant to the xxd.1 man
|
Note: The results of the examples below are relevant to the xxd.1 man
|
||||||
page as of May 2024
|
page as of May 2024
|
||||||
|
|
||||||
Print 120 bytes as a continuous hex dump with 20 octets per line.
|
Print 120 bytes as a continuous hex dump with 20 octets per line.
|
||||||
@@ -216,7 +214,7 @@ EXAMPLES
|
|||||||
% xxd -s 0x33 -l 13 -c 13 xxd.1
|
% xxd -s 0x33 -l 13 -c 13 xxd.1
|
||||||
00000033: 3235 7468 204d 6179 2031 3939 36 25th May 1996
|
00000033: 3235 7468 204d 6179 2031 3939 36 25th May 1996
|
||||||
|
|
||||||
Create a 65537 byte file with all bytes 0x00, except for the last one
|
Create a 65537 byte file with all bytes 0x00, except for the last one
|
||||||
which is 'A' (hex 0x41).
|
which is 'A' (hex 0x41).
|
||||||
% echo "010000: 41" | xxd -r > file
|
% echo "010000: 41" | xxd -r > file
|
||||||
|
|
||||||
|
@@ -269,6 +269,23 @@ func Test_xxd()
|
|||||||
endfor
|
endfor
|
||||||
|
|
||||||
|
|
||||||
|
" Test 19: Print C include in binary format
|
||||||
|
let s:test += 1
|
||||||
|
call writefile(['TESTabcd09'], 'XXDfile')
|
||||||
|
%d
|
||||||
|
exe '0r! ' . s:xxd_cmd . ' -i -b XXDfile'
|
||||||
|
$d
|
||||||
|
let expected =<< trim [CODE]
|
||||||
|
unsigned char XXDfile[] = {
|
||||||
|
0b01010100, 0b01000101, 0b01010011, 0b01010100, 0b01100001, 0b01100010,
|
||||||
|
0b01100011, 0b01100100, 0b00110000, 0b00111001, 0b00001010
|
||||||
|
};
|
||||||
|
unsigned int XXDfile_len = 11;
|
||||||
|
[CODE]
|
||||||
|
|
||||||
|
call assert_equal(expected, getline(1,'$'), s:Mess(s:test))
|
||||||
|
|
||||||
|
|
||||||
%d
|
%d
|
||||||
bwipe!
|
bwipe!
|
||||||
call delete('XXDfile')
|
call delete('XXDfile')
|
||||||
|
@@ -704,6 +704,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
732,
|
||||||
/**/
|
/**/
|
||||||
731,
|
731,
|
||||||
/**/
|
/**/
|
||||||
|
@@ -63,6 +63,7 @@
|
|||||||
* 25.01.2024 revert the previous patch (size_t instead of unsigned int)
|
* 25.01.2024 revert the previous patch (size_t instead of unsigned int)
|
||||||
* 10.02.2024 fix buffer-overflow when writing color output to buffer, #14003
|
* 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.05.2024 fix another buffer-overflow when writing colored output to buffer, #14738
|
||||||
|
* 10.09.2024 Support -b and -i together, #15661
|
||||||
*
|
*
|
||||||
* (c) 1990-1998 by Juergen Weigert (jnweiger@gmail.com)
|
* (c) 1990-1998 by Juergen Weigert (jnweiger@gmail.com)
|
||||||
*
|
*
|
||||||
@@ -143,7 +144,7 @@ extern void perror __P((char *));
|
|||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
char version[] = "xxd 2024-05-10 by Juergen Weigert et al.";
|
char version[] = "xxd 2024-09-15 by Juergen Weigert et al.";
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
char osver[] = " (Win32)";
|
char osver[] = " (Win32)";
|
||||||
#else
|
#else
|
||||||
@@ -220,11 +221,11 @@ char osver[] = "";
|
|||||||
char hexxa[] = "0123456789abcdef0123456789ABCDEF", *hexx = hexxa;
|
char hexxa[] = "0123456789abcdef0123456789ABCDEF", *hexx = hexxa;
|
||||||
|
|
||||||
/* the different hextypes known by this program: */
|
/* the different hextypes known by this program: */
|
||||||
#define HEX_NORMAL 0
|
#define HEX_NORMAL 0x00 /* no flags set */
|
||||||
#define HEX_POSTSCRIPT 1
|
#define HEX_POSTSCRIPT 0x01
|
||||||
#define HEX_CINCLUDE 2
|
#define HEX_CINCLUDE 0x02
|
||||||
#define HEX_BITS 3 /* not hex a dump, but bits: 01111001 */
|
#define HEX_BITS 0x04 /* not hex a dump, but bits: 01111001 */
|
||||||
#define HEX_LITTLEENDIAN 4
|
#define HEX_LITTLEENDIAN 0x08
|
||||||
|
|
||||||
#define CONDITIONAL_CAPITALIZE(c) (capitalize ? toupper((unsigned char)(c)) : (c))
|
#define CONDITIONAL_CAPITALIZE(c) (capitalize ? toupper((unsigned char)(c)) : (c))
|
||||||
|
|
||||||
@@ -255,7 +256,7 @@ exit_with_usage(void)
|
|||||||
fprintf(stderr, " or\n %s -r [-s [-]offset] [-c cols] [-ps] [infile [outfile]]\n", pname);
|
fprintf(stderr, " or\n %s -r [-s [-]offset] [-c cols] [-ps] [infile [outfile]]\n", pname);
|
||||||
fprintf(stderr, "Options:\n");
|
fprintf(stderr, "Options:\n");
|
||||||
fprintf(stderr, " -a toggle autoskip: A single '*' replaces nul-lines. Default off.\n");
|
fprintf(stderr, " -a toggle autoskip: A single '*' replaces nul-lines. Default off.\n");
|
||||||
fprintf(stderr, " -b binary digit dump (incompatible with -ps,-i). Default hex.\n");
|
fprintf(stderr, " -b binary digit dump (incompatible with -ps). Default hex.\n");
|
||||||
fprintf(stderr, " -C capitalize variable names in C include file style (-i).\n");
|
fprintf(stderr, " -C capitalize variable names in C include file style (-i).\n");
|
||||||
fprintf(stderr, " -c cols format <cols> octets per line. Default 16 (-i: 12, -ps: 30).\n");
|
fprintf(stderr, " -c cols format <cols> octets per line. Default 16 (-i: 12, -ps: 30).\n");
|
||||||
fprintf(stderr, " -E show characters in EBCDIC. Default ASCII.\n");
|
fprintf(stderr, " -E show characters in EBCDIC. Default ASCII.\n");
|
||||||
@@ -692,11 +693,11 @@ main(int argc, char *argv[])
|
|||||||
{
|
{
|
||||||
pp = argv[1] + (!STRNCMP(argv[1], "--", 2) && argv[1][2]);
|
pp = argv[1] + (!STRNCMP(argv[1], "--", 2) && argv[1][2]);
|
||||||
if (!STRNCMP(pp, "-a", 2)) autoskip = 1 - autoskip;
|
if (!STRNCMP(pp, "-a", 2)) autoskip = 1 - autoskip;
|
||||||
else if (!STRNCMP(pp, "-b", 2)) hextype = HEX_BITS;
|
else if (!STRNCMP(pp, "-b", 2)) hextype |= HEX_BITS;
|
||||||
else if (!STRNCMP(pp, "-e", 2)) hextype = HEX_LITTLEENDIAN;
|
else if (!STRNCMP(pp, "-e", 2)) hextype |= HEX_LITTLEENDIAN;
|
||||||
else if (!STRNCMP(pp, "-u", 2)) hexx = hexxa + 16;
|
else if (!STRNCMP(pp, "-u", 2)) hexx = hexxa + 16;
|
||||||
else if (!STRNCMP(pp, "-p", 2)) hextype = HEX_POSTSCRIPT;
|
else if (!STRNCMP(pp, "-p", 2)) hextype |= HEX_POSTSCRIPT;
|
||||||
else if (!STRNCMP(pp, "-i", 2)) hextype = HEX_CINCLUDE;
|
else if (!STRNCMP(pp, "-i", 2)) hextype |= HEX_CINCLUDE;
|
||||||
else if (!STRNCMP(pp, "-C", 2)) capitalize = 1;
|
else if (!STRNCMP(pp, "-C", 2)) capitalize = 1;
|
||||||
else if (!STRNCMP(pp, "-d", 2)) decimal_offset = 1;
|
else if (!STRNCMP(pp, "-d", 2)) decimal_offset = 1;
|
||||||
else if (!STRNCMP(pp, "-r", 2)) revert++;
|
else if (!STRNCMP(pp, "-r", 2)) revert++;
|
||||||
@@ -856,11 +857,19 @@ main(int argc, char *argv[])
|
|||||||
argc--;
|
argc--;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (hextype != (HEX_CINCLUDE | HEX_BITS))
|
||||||
|
{
|
||||||
|
/* Allow at most one bit to be set in hextype */
|
||||||
|
if (hextype & (hextype - 1))
|
||||||
|
error_exit(1, "only one of -b, -e, -u, -p, -i can be used");
|
||||||
|
}
|
||||||
|
|
||||||
if (!colsgiven || (!cols && hextype != HEX_POSTSCRIPT))
|
if (!colsgiven || (!cols && hextype != HEX_POSTSCRIPT))
|
||||||
switch (hextype)
|
switch (hextype)
|
||||||
{
|
{
|
||||||
case HEX_POSTSCRIPT: cols = 30; break;
|
case HEX_POSTSCRIPT: cols = 30; break;
|
||||||
case HEX_CINCLUDE: cols = 12; break;
|
case HEX_CINCLUDE: cols = 12; break;
|
||||||
|
case HEX_CINCLUDE | HEX_BITS:
|
||||||
case HEX_BITS: cols = 6; break;
|
case HEX_BITS: cols = 6; break;
|
||||||
case HEX_NORMAL:
|
case HEX_NORMAL:
|
||||||
case HEX_LITTLEENDIAN:
|
case HEX_LITTLEENDIAN:
|
||||||
@@ -870,6 +879,7 @@ main(int argc, char *argv[])
|
|||||||
if (octspergrp < 0)
|
if (octspergrp < 0)
|
||||||
switch (hextype)
|
switch (hextype)
|
||||||
{
|
{
|
||||||
|
case HEX_CINCLUDE | HEX_BITS:
|
||||||
case HEX_BITS: octspergrp = 1; break;
|
case HEX_BITS: octspergrp = 1; break;
|
||||||
case HEX_NORMAL: octspergrp = 2; break;
|
case HEX_NORMAL: octspergrp = 2; break;
|
||||||
case HEX_LITTLEENDIAN: octspergrp = 4; break;
|
case HEX_LITTLEENDIAN: octspergrp = 4; break;
|
||||||
@@ -966,7 +976,7 @@ main(int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (hextype == HEX_CINCLUDE)
|
if (hextype & HEX_CINCLUDE)
|
||||||
{
|
{
|
||||||
/* A user-set variable name overrides fp == stdin */
|
/* A user-set variable name overrides fp == stdin */
|
||||||
if (varname == NULL && fp != stdin)
|
if (varname == NULL && fp != stdin)
|
||||||
@@ -982,11 +992,28 @@ main(int argc, char *argv[])
|
|||||||
|
|
||||||
p = 0;
|
p = 0;
|
||||||
while ((length < 0 || p < length) && (c = getc_or_die(fp)) != EOF)
|
while ((length < 0 || p < length) && (c = getc_or_die(fp)) != EOF)
|
||||||
{
|
{
|
||||||
FPRINTF_OR_DIE((fpo, (hexx == hexxa) ? "%s0x%02x" : "%s0X%02X",
|
if (hextype & HEX_BITS)
|
||||||
|
{
|
||||||
|
if (p == 0)
|
||||||
|
fputs_or_die(" ", fpo);
|
||||||
|
else if (p % cols == 0)
|
||||||
|
fputs_or_die(",\n ", fpo);
|
||||||
|
else
|
||||||
|
fputs_or_die(", ", fpo);
|
||||||
|
|
||||||
|
FPRINTF_OR_DIE((fpo, "0b"));
|
||||||
|
for (int j = 7; j >= 0; j--)
|
||||||
|
putc_or_die((c & (1 << j)) ? '1' : '0', fpo);
|
||||||
|
p++;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
FPRINTF_OR_DIE((fpo, (hexx == hexxa) ? "%s0x%02x" : "%s0X%02X",
|
||||||
(p % cols) ? ", " : (!p ? " " : ",\n "), c));
|
(p % cols) ? ", " : (!p ? " " : ",\n "), c));
|
||||||
p++;
|
p++;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (p)
|
if (p)
|
||||||
fputs_or_die("\n", fpo);
|
fputs_or_die("\n", fpo);
|
||||||
|
Reference in New Issue
Block a user