Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.busybox.net/busybox.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorManuel Novoa III <mjn3@codepoet.org>2004-05-26 19:21:19 +0400
committerManuel Novoa III <mjn3@codepoet.org>2004-05-26 19:21:19 +0400
commitd709743b09a456f4550ad0b06dca89dc41a19e60 (patch)
tree994819fb891500254f5b5780c384b7cc075c9610 /coreutils/tee.c
parenta6f6a95ba45e094bbee6fd0895925a992e4a29cd (diff)
If read were to return with an error, bad things would happen. Fix it.
Also, make sure read errors are reflected in the applet exit code.
Diffstat (limited to 'coreutils/tee.c')
-rw-r--r--coreutils/tee.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/coreutils/tee.c b/coreutils/tee.c
index 6ec1d6dff..ba2e10f90 100644
--- a/coreutils/tee.c
+++ b/coreutils/tee.c
@@ -38,7 +38,7 @@ int tee_main(int argc, char **argv)
int flags;
int retval = EXIT_SUCCESS;
#ifdef CONFIG_FEATURE_TEE_USE_BLOCK_IO
- size_t c;
+ ssize_t c;
RESERVE_CONFIG_BUFFER(buf, BUFSIZ);
#else
int c;
@@ -78,12 +78,16 @@ int tee_main(int argc, char **argv)
*p = NULL; /* Store the sentinal value. */
#ifdef CONFIG_FEATURE_TEE_USE_BLOCK_IO
- while ((c = read(STDIN_FILENO, buf, BUFSIZ)) != 0) {
+ while ((c = safe_read(STDIN_FILENO, buf, BUFSIZ)) > 0) {
for (p=files ; *p ; p++) {
fwrite(buf, 1, c, *p);
}
}
+ if (c < 0) { /* Make sure read errors are signaled. */
+ retval = EXIT_FAILURE;
+ }
+
#ifdef CONFIG_FEATURE_CLEAN_UP
RELEASE_CONFIG_BUFFER(buf);
#endif