aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--coreutils/Config.in7
-rw-r--r--coreutils/wc.c11
2 files changed, 15 insertions, 3 deletions
diff --git a/coreutils/Config.in b/coreutils/Config.in
index 20b5955d4..6598a8d9c 100644
--- a/coreutils/Config.in
+++ b/coreutils/Config.in
@@ -704,6 +704,13 @@ config CONFIG_WC
wc is used to print the number of bytes, words, and lines,
in specified files.
+config CONFIG_FEATURE_WC_LARGE
+ bool "Support very large files in wc"
+ default n
+ depends on CONFIG_WC
+ help
+ Use "unsigned long long" in wc for count variables
+
config CONFIG_WHO
bool "who"
default n
diff --git a/coreutils/wc.c b/coreutils/wc.c
index 78a5105da..6ddac4dec 100644
--- a/coreutils/wc.c
+++ b/coreutils/wc.c
@@ -55,10 +55,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,
@@ -82,7 +85,7 @@ int wc_main(int argc, char **argv)
int c;
char status = EXIT_SUCCESS;
char in_word;
- char print_type;
+ unsigned print_type;
print_type = bb_getopt_ulflags(argc, argv, "lwcL");
@@ -115,6 +118,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)) {