diff options
Diffstat (limited to 'coreutils/uuencode.c')
-rw-r--r-- | coreutils/uuencode.c | 38 |
1 files changed, 18 insertions, 20 deletions
diff --git a/coreutils/uuencode.c b/coreutils/uuencode.c index 49b2d91..fd3326d 100644 --- a/coreutils/uuencode.c +++ b/coreutils/uuencode.c @@ -29,7 +29,7 @@ #include "busybox.h" /* Conversion table. for base 64 */ -static char tbl_base64[65] = { +static const char tbl_base64[65] = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', @@ -41,7 +41,7 @@ static char tbl_base64[65] = { '=' /* termination character */ }; -static char tbl_std[65] = { +static const char tbl_std[65] = { '`', '!', '"', '#', '$', '%', '&', '\'', '(', ')', '*', '+', ',', '-', '.', '/', '0', '1', '2', '3', '4', '5', '6', '7', @@ -92,40 +92,36 @@ int uuencode_main(int argc, char **argv) int write_size = dst_buf_size; struct stat stat_buf; FILE *src_stream = stdin; - char *tbl = tbl_std; + const char *tbl; size_t size; mode_t mode; - int opt; RESERVE_CONFIG_BUFFER(src_buf, SRC_BUF_SIZE + 1); RESERVE_CONFIG_BUFFER(dst_buf, DST_BUF_SIZE + 1); - while ((opt = getopt(argc, argv, "m")) != -1) { - switch (opt) { - case 'm': - tbl = tbl_base64; - break; - default: - show_usage(); - } + tbl = tbl_std; + if (bb_getopt_ulflags(argc, argv, "m") & 1) { + tbl = tbl_base64; } switch (argc - optind) { case 2: - src_stream = xfopen(argv[optind], "r"); - stat(argv[optind], &stat_buf); + src_stream = bb_xfopen(argv[optind], "r"); + if (stat(argv[optind], &stat_buf) < 0) { + bb_perror_msg_and_die("stat"); + } mode = stat_buf.st_mode & (S_IRWXU | S_IRWXG | S_IRWXO); if (src_stream == stdout) { - printf("NULL\n"); + puts("NULL"); } break; case 1: mode = 0666 & ~umask(0666); break; default: - show_usage(); + bb_show_usage(); } - printf("begin%s %o %s", tbl == tbl_std ? "" : "-base64", mode, argv[argc - 1]); + bb_printf("begin%s %o %s", tbl == tbl_std ? "" : "-base64", mode, argv[argc - 1]); while ((size = fread(src_buf, 1, src_buf_size, src_stream)) > 0) { if (size != src_buf_size) { @@ -142,10 +138,12 @@ int uuencode_main(int argc, char **argv) putchar(tbl[size]); } if (fwrite(dst_buf, 1, write_size, stdout) != write_size) { - perror("Couldnt finish writing"); + bb_perror_msg_and_die(bb_msg_write_error); } } - printf(tbl == tbl_std ? "\n`\nend\n" : "\n====\n"); + bb_printf(tbl == tbl_std ? "\n`\nend\n" : "\n====\n"); + + bb_xferror(src_stream, "source"); /* TODO - Fix this! */ - return(EXIT_SUCCESS); + bb_fflush_stdout_and_exit(EXIT_SUCCESS); } |