X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=coreutils%2Fwc.c;h=d0e5482ca500ca141f2abebd5db5ce6c06f46ada;hb=11a6f9b44f4a425b03e3a7a984e7b3e253e5f884;hp=78a5105da17661450c804760817307abdde77c5c;hpb=3ed001ff2631ad6911096148f47a2719a5b6d4f4;p=oweals%2Fbusybox.git diff --git a/coreutils/wc.c b/coreutils/wc.c index 78a5105da..d0e5482ca 100644 --- a/coreutils/wc.c +++ b/coreutils/wc.c @@ -36,16 +36,14 @@ * (adapted from example in gnu wc.c) * * echo hello > /tmp/testfile && - * (dd ibs=1k skip=1 count=0 &> /dev/null ; wc -c) < /tmp/testfile + * (dd ibs=1k skip=1 count=0 &> /dev/null; wc -c) < /tmp/testfile * * for which 'wc -c' should output '0'. */ -#include "busybox.h" +#include "libbb.h" -#ifdef CONFIG_LOCALE_SUPPORT -#include -#include +#if ENABLE_LOCALE_SUPPORT #define isspace_given_isprint(c) isspace(c) #else #undef isspace @@ -55,10 +53,13 @@ #define isspace_given_isprint(c) ((c) == ' ') #endif -//#define COUNT_T unsigned long long -//#define COUNT_FMT "llu" +#if ENABLE_FEATURE_WC_LARGE +#define COUNT_T unsigned long long +#define COUNT_FMT "llu" +#else #define COUNT_T unsigned #define COUNT_FMT "u" +#endif enum { WC_LINES = 0, @@ -67,11 +68,12 @@ enum { WC_LENGTH = 3 }; -int wc_main(int argc, char **argv) +int wc_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; +int wc_main(int argc UNUSED_PARAM, char **argv) { FILE *fp; const char *s, *arg; - const char *start_fmt = "%9"COUNT_FMT; + const char *start_fmt = " %9"COUNT_FMT + 1; const char *fname_fmt = " %s\n"; COUNT_T *pcounts; COUNT_T counts[4]; @@ -80,11 +82,11 @@ int wc_main(int argc, char **argv) unsigned u; int num_files = 0; int c; - char status = EXIT_SUCCESS; - char in_word; - char print_type; + smallint status = EXIT_SUCCESS; + smallint in_word; + unsigned print_type; - print_type = bb_getopt_ulflags(argc, argv, "lwcL"); + print_type = getopt32(argv, "lwcL"); if (print_type == 0) { print_type = (1 << WC_LINES) | (1 << WC_WORDS) | (1 << WC_CHARS); @@ -104,7 +106,7 @@ int wc_main(int argc, char **argv) while ((arg = *argv++) != 0) { ++num_files; - fp = bb_wfopen_input(arg); + fp = fopen_or_warn_stdin(arg); if (!fp) { status = EXIT_FAILURE; continue; @@ -115,6 +117,8 @@ int wc_main(int argc, char **argv) in_word = 0; do { + /* Our -w doesn't match GNU wc exactly... oh well */ + ++counts[WC_CHARS]; c = getc(fp); if (isprint(c)) { @@ -146,7 +150,7 @@ int wc_main(int argc, char **argv) } } else if (c == EOF) { if (ferror(fp)) { - bb_perror_msg("%s", arg); + bb_simple_perror_msg(arg); status = EXIT_FAILURE; } --counts[WC_CHARS]; @@ -167,7 +171,7 @@ int wc_main(int argc, char **argv) } totals[WC_LENGTH] -= counts[WC_LENGTH]; - bb_fclose_nonstdin(fp); + fclose_if_not_stdin(fp); OUTPUT: /* coreutils wc tries hard to print pretty columns @@ -177,12 +181,12 @@ int wc_main(int argc, char **argv) u = 0; do { if (print_type & (1 << u)) { - bb_printf(s, pcounts[u]); + printf(s, pcounts[u]); s = " %9"COUNT_FMT; /* Ok... restore the leading space. */ } totals[u] += pcounts[u]; } while (++u < 4); - bb_printf(fname_fmt, arg); + printf(fname_fmt, arg); } /* If more than one file was processed, we want the totals. To save some @@ -197,5 +201,5 @@ int wc_main(int argc, char **argv) goto OUTPUT; } - bb_fflush_stdout_and_exit(status); + fflush_stdout_and_exit(status); }