From a89d50fb9addfe0060f697a7e1d31a7b3010b2bb Mon Sep 17 00:00:00 2001 From: Denis Vlasenko Date: Tue, 13 Nov 2007 17:51:40 +0000 Subject: [PATCH] tr: properly detect read errors (Fernando Silveira ) readprofile: use xwrite function old new delta tr_main 679 677 -2 readprofile_main 1964 1944 -20 --- coreutils/tr.c | 8 +++++--- util-linux/readprofile.c | 5 +---- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/coreutils/tr.c b/coreutils/tr.c index 9521bbcd5..e60e08b25 100644 --- a/coreutils/tr.c +++ b/coreutils/tr.c @@ -173,7 +173,8 @@ int tr_main(int argc, char **argv) int idx = 1; int i; smalluint flags = 0; - size_t read_chars = 0, in_index = 0, out_index = 0, c, coded, last = -1; + ssize_t read_chars = 0; + size_t in_index = 0, out_index = 0, c, coded, last = -1; RESERVE_CONFIG_UBUFFER(output, BUFSIZ); RESERVE_CONFIG_BUFFER(vector, ASCII+1); RESERVE_CONFIG_BUFFER(invec, ASCII+1); @@ -223,8 +224,9 @@ int tr_main(int argc, char **argv) } read_chars = read(STDIN_FILENO, tr_buf, BUFSIZ); if (read_chars <= 0) { - if (write(STDOUT_FILENO, (char *)output, out_index) != out_index) - bb_perror_msg(bb_msg_write_error); + xwrite(STDOUT_FILENO, (char *)output, out_index); + if (read_chars < 0) + bb_perror_msg_and_die(bb_msg_read_error); exit(EXIT_SUCCESS); } in_index = 0; diff --git a/util-linux/readprofile.c b/util-linux/readprofile.c index dbe7c7171..c6152558c 100644 --- a/util-linux/readprofile.c +++ b/util-linux/readprofile.c @@ -88,10 +88,7 @@ int readprofile_main(int argc, char **argv) } fd = xopen(defaultpro, O_WRONLY); - - if (full_write(fd, &multiplier, to_write) != to_write) - bb_perror_msg_and_die("error writing %s", defaultpro); - + xwrite(fd, &multiplier, to_write); close(fd); return EXIT_SUCCESS; }