mirror of
git://git.sv.gnu.org/coreutils.git
synced 2026-04-21 03:12:48 +02:00
tee: simplify argv handling
* src/tee.c (tee_files): Last arg is now char ** instead of char const **, as that is a bit simpler. All callers changed. Modify files[-1], not files[nfiles], as that is a bit faster and simpler. Latter problem pointed out by Rainer Deyke in: http://bugs.gnu.org/21611
This commit is contained in:
24
src/tee.c
24
src/tee.c
@@ -36,7 +36,7 @@
|
||||
proper_name ("Richard M. Stallman"), \
|
||||
proper_name ("David MacKenzie")
|
||||
|
||||
static bool tee_files (int nfiles, const char **files);
|
||||
static bool tee_files (int nfiles, char **files);
|
||||
|
||||
/* If true, append to output files rather than truncating them. */
|
||||
static bool append;
|
||||
@@ -168,7 +168,7 @@ main (int argc, char **argv)
|
||||
/* Do *not* warn if tee is given no file arguments.
|
||||
POSIX requires that it work when given no arguments. */
|
||||
|
||||
ok = tee_files (argc - optind, (const char **) &argv[optind]);
|
||||
ok = tee_files (argc - optind, &argv[optind]);
|
||||
if (close (STDIN_FILENO) != 0)
|
||||
error (EXIT_FAILURE, errno, _("standard input"));
|
||||
|
||||
@@ -176,11 +176,11 @@ main (int argc, char **argv)
|
||||
}
|
||||
|
||||
/* Copy the standard input into each of the NFILES files in FILES
|
||||
and into the standard output.
|
||||
and into the standard output. As a side effect, modify FILES[-1].
|
||||
Return true if successful. */
|
||||
|
||||
static bool
|
||||
tee_files (int nfiles, const char **files)
|
||||
tee_files (int nfiles, char **files)
|
||||
{
|
||||
size_t n_outputs = 0;
|
||||
FILE **descriptors;
|
||||
@@ -193,13 +193,6 @@ tee_files (int nfiles, const char **files)
|
||||
? (append ? "ab" : "wb")
|
||||
: (append ? "a" : "w"));
|
||||
|
||||
descriptors = xnmalloc (nfiles + 1, sizeof *descriptors);
|
||||
|
||||
/* Move all the names 'up' one in the argv array to make room for
|
||||
the entry for standard output. This writes into argv[argc]. */
|
||||
for (i = nfiles; i >= 1; i--)
|
||||
files[i] = files[i - 1];
|
||||
|
||||
if (O_BINARY && ! isatty (STDIN_FILENO))
|
||||
xfreopen (NULL, "rb", stdin);
|
||||
if (O_BINARY && ! isatty (STDOUT_FILENO))
|
||||
@@ -207,10 +200,13 @@ tee_files (int nfiles, const char **files)
|
||||
|
||||
fadvise (stdin, FADVISE_SEQUENTIAL);
|
||||
|
||||
/* In the array of NFILES + 1 descriptors, make
|
||||
the first one correspond to standard output. */
|
||||
/* Set up FILES[0 .. NFILES] and DESCRIPTORS[0 .. NFILES].
|
||||
In both arrays, entry 0 corresponds to standard output. */
|
||||
|
||||
descriptors = xnmalloc (nfiles + 1, sizeof *descriptors);
|
||||
files--;
|
||||
descriptors[0] = stdout;
|
||||
files[0] = _("standard output");
|
||||
files[0] = bad_cast (_("standard output"));
|
||||
setvbuf (stdout, NULL, _IONBF, 0);
|
||||
n_outputs++;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user