tr: properly detect read errors (Fernando Silveira <fsilveira@gmail.com>)
authorDenis Vlasenko <vda.linux@googlemail.com>
Tue, 13 Nov 2007 17:51:40 +0000 (17:51 -0000)
committerDenis Vlasenko <vda.linux@googlemail.com>
Tue, 13 Nov 2007 17:51:40 +0000 (17:51 -0000)
readprofile: use xwrite

function                                             old     new   delta
tr_main                                              679     677      -2
readprofile_main                                    1964    1944     -20

coreutils/tr.c
util-linux/readprofile.c

index 9521bbcd507f5da3cf5b08b8e847aaaf56f39f41..e60e08b255cc0a4bdcad88dba261beb5fa58ce96 100644 (file)
@@ -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;
index dbe7c7171b0de24ee982cd08d944a63643f5a561..c6152558ca2d6a3a380143f3060738d1884a9a38 100644 (file)
@@ -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;
        }