** New features
- cut, head, tail now have the -z,--zero-terminated option, and
+ comm, cut, head, tail now have the -z,--zero-terminated option, and
tac --separator accepts an empty argument, to work with NUL delimited items.
dd now summarizes sizes in --human-readable format too, not just --si.
/* If nonzero, we have warned about disorder in that file. */
static bool issued_disorder_warning[2];
+/* line delimiter. */
+static unsigned char delim = '\n';
+
/* If nonzero, check that the input is correctly ordered. */
static enum
{
{"check-order", no_argument, NULL, CHECK_ORDER_OPTION},
{"nocheck-order", no_argument, NULL, NOCHECK_ORDER_OPTION},
{"output-delimiter", required_argument, NULL, OUTPUT_DELIMITER_OPTION},
+ {"zero-terminated", no_argument, NULL, 'z'},
{GETOPT_HELP_OPTION_DECL},
{GETOPT_VERSION_OPTION_DECL},
{NULL, 0, NULL, 0}
"), stdout);
fputs (_("\
--output-delimiter=STR separate columns with STR\n\
+"), stdout);
+ fputs (_("\
+ -z, --zero-terminated line delimiter is NUL, not newline\n\
"), stdout);
fputs (HELP_OPTION_DESCRIPTION, stdout);
fputs (VERSION_OPTION_DESCRIPTION, stdout);
fadvise (streams[i], FADVISE_SEQUENTIAL);
- thisline[i] = readlinebuffer (all_line[i][alt[i][0]], streams[i]);
+ thisline[i] = readlinebuffer_delim (all_line[i][alt[i][0]], streams[i],
+ delim);
if (ferror (streams[i]))
error (EXIT_FAILURE, errno, "%s", quotef (infiles[i]));
}
alt[i][1] = alt[i][0];
alt[i][0] = (alt[i][0] + 1) & 0x03;
- thisline[i] = readlinebuffer (all_line[i][alt[i][0]], streams[i]);
+ thisline[i] = readlinebuffer_delim (all_line[i][alt[i][0]],
+ streams[i], delim);
if (thisline[i])
check_order (all_line[i][alt[i][1]], thisline[i], i + 1);
issued_disorder_warning[0] = issued_disorder_warning[1] = false;
check_input_order = CHECK_ORDER_DEFAULT;
- while ((c = getopt_long (argc, argv, "123", long_options, NULL)) != -1)
+ while ((c = getopt_long (argc, argv, "123z", long_options, NULL)) != -1)
switch (c)
{
case '1':
both = false;
break;
+ case 'z':
+ delim = '\0';
+ break;
+
case NOCHECK_ORDER_OPTION:
check_input_order = CHECK_ORDER_DISABLED;
break;
@ENV{qw(LANGUAGE LANG LC_ALL)} = ('C') x 3;
my @inputs = ({IN=>{a=>"1\n3"}}, {IN=>{b=>"2\n3"}});
+my @zinputs = ({IN=>{za=>"1\0003"}}, {IN=>{zb=>"2\0003"}});
my @Tests =
(
# basic operation
['basic', @inputs, {OUT=>"1\n\t2\n\t\t3\n"} ],
+ ['zbasic', '-z', @zinputs, {OUT=>"1\0\t2\0\t\t3\0"} ],
# suppress lines unique to file 1
['opt-1', '-1', @inputs, {OUT=>"2\n\t3\n"} ],
+ ['zopt-1', '-z', '-1', @zinputs, {OUT=>"2\0\t3\0"} ],
# suppress lines unique to file 2
['opt-2', '-2', @inputs, {OUT=>"1\n\t3\n"} ],