X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=coreutils%2Fsum.c;h=c55293dc9673af11b3b12fb37e67989c8c2b7c27;hb=af3f42011628585cd5c8f5c1fd4b43f2e370a23d;hp=e6cfbfd806a4d9354918d50d823aa23776c03e75;hpb=62a90cdd7435f09f4bb8673e8b7b213067f9d5cc;p=oweals%2Fbusybox.git diff --git a/coreutils/sum.c b/coreutils/sum.c index e6cfbfd80..c55293dc9 100644 --- a/coreutils/sum.c +++ b/coreutils/sum.c @@ -10,10 +10,27 @@ * Written by Kayvan Aghaiepour and David MacKenzie * Taken from coreutils and turned into a busybox applet by Mike Frysinger * - * Licensed under the GPL v2 or later, see the file LICENSE in this tarball. + * Licensed under GPLv2 or later, see file LICENSE in this source tree. */ +//config:config SUM +//config: bool "sum" +//config: default y +//config: help +//config: checksum and count the blocks in a file + +//applet:IF_SUM(APPLET(sum, BB_DIR_USR_BIN, BB_SUID_DROP)) + +//kbuild:lib-$(CONFIG_SUM) += sum.o + +//usage:#define sum_trivial_usage +//usage: "[-rs] [FILE]..." +//usage:#define sum_full_usage "\n\n" +//usage: "Checksum and count the blocks in a file\n" +//usage: "\n -r Use BSD sum algorithm (1K blocks)" +//usage: "\n -s Use System V sum algorithm (512byte blocks)" #include "libbb.h" +#include "common_bufsiz.h" enum { SUM_BSD, PRINT_NAME, SUM_SYSV }; @@ -23,25 +40,27 @@ enum { SUM_BSD, PRINT_NAME, SUM_SYSV }; /* Return 1 if successful. */ static unsigned sum_file(const char *file, unsigned type) { -#define buf bb_common_bufsiz1 unsigned long long total_bytes = 0; int fd, r; /* The sum of all the input bytes, modulo (UINT_MAX + 1). */ unsigned s = 0; +#define buf bb_common_bufsiz1 + setup_common_bufsiz(); + fd = open_or_warn_stdin(file); if (fd == -1) return 0; while (1) { - size_t bytes_read = safe_read(fd, buf, BUFSIZ); + size_t bytes_read = safe_read(fd, buf, COMMON_BUFSIZE); if ((ssize_t)bytes_read <= 0) { r = (fd && close(fd) != 0); if (!bytes_read && !r) /* no error */ break; - bb_perror_msg(file); + bb_simple_perror_msg(file); return 0; } @@ -63,15 +82,15 @@ static unsigned sum_file(const char *file, unsigned type) if (type >= SUM_SYSV) { r = (s & 0xffff) + ((s & 0xffffffff) >> 16); s = (r & 0xffff) + (r >> 16); - printf("%d %llu %s\n", s, (total_bytes + 511) / 512, file); + printf("%u %llu %s\n", s, (total_bytes + 511) / 512, file); } else - printf("%05d %5llu %s\n", s, (total_bytes + 1023) / 1024, file); + printf("%05u %5llu %s\n", s, (total_bytes + 1023) / 1024, file); return 1; #undef buf } int sum_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; -int sum_main(int argc ATTRIBUTE_UNUSED, char **argv) +int sum_main(int argc UNUSED_PARAM, char **argv) { unsigned n; unsigned type = SUM_BSD; @@ -87,8 +106,8 @@ int sum_main(int argc ATTRIBUTE_UNUSED, char **argv) n = sum_file("-", type); } else { /* Need to print the name if either - - more than one file given - - doing sysv */ + * - more than one file given + * - doing sysv */ type += (argv[1] || type == SUM_SYSV); n = 1; do {