From 8a2e56c5dfc41f6946e36234eef4df559286db05 Mon Sep 17 00:00:00 2001
From: Eric Andersen <andersen@codepoet.org>
Date: Thu, 21 Sep 2000 02:23:30 +0000
Subject: Large file >2Gib support.

---
 Makefile          | 14 ++++++++++++++
 coreutils/ls.c    |  8 ++++++++
 ls.c              |  8 ++++++++
 more.c            |  4 ++++
 util-linux/more.c |  4 ++++
 5 files changed, 38 insertions(+)

diff --git a/Makefile b/Makefile
index 278887f36..6a9c694fa 100644
--- a/Makefile
+++ b/Makefile
@@ -40,6 +40,16 @@ DODEBUG = false
 # Do not enable this for production builds...
 DODMALLOC = false
 
+# If you want large file summit support, turn this on.
+# This has no effect if you don't have a kernel with lfs
+# support, and a system with libc-2.1.3 or later.
+# Some of the programs that can benefit from lfs support
+# are dd, gzip, mount, tar, and mkfs_minix.
+# LFS allows you to use the above programs for files
+# larger than 2GB!
+DOLFS = false
+
+
 # If you are running a cross compiler, you may want to set this
 # to something more interesting...
 CROSS = #powerpc-linux-
@@ -63,6 +73,10 @@ OPTIMIZATION = $(shell if $(CC) -Os -S -o /dev/null -xc /dev/null >/dev/null 2>&
 
 WARNINGS = -Wall
 
+ifeq ($(DOLFS),true)
+    # For large file summit support
+    CFLAGS+=-D_FILE_OFFSET_BITS=64
+endif
 ifeq ($(DODMALLOC),true)
     # For testing mem leaks with dmalloc
     CFLAGS+=-DDMALLOC
diff --git a/coreutils/ls.c b/coreutils/ls.c
index 03fed5478..b818003a8 100644
--- a/coreutils/ls.c
+++ b/coreutils/ls.c
@@ -532,7 +532,11 @@ int list_single(struct dnode *dn)
 				column += 8;
 				break;
 			case LIST_BLOCKS:
+#if _FILE_OFFSET_BITS == 64
+				fprintf(stdout, "%4lld ", dn->dstat.st_blocks>>1);
+#else
 				fprintf(stdout, "%4ld ", dn->dstat.st_blocks>>1);
+#endif
 				column += 5;
 				break;
 			case LIST_MODEBITS:
@@ -578,7 +582,11 @@ int list_single(struct dnode *dn)
 				if (S_ISBLK(dn->dstat.st_mode) || S_ISCHR(dn->dstat.st_mode)) {
 					fprintf(stdout, "%4d, %3d ", (int)MAJOR(dn->dstat.st_rdev), (int)MINOR(dn->dstat.st_rdev));
 				} else {
+#if _FILE_OFFSET_BITS == 64
+					fprintf(stdout, "%9lld ", dn->dstat.st_size);
+#else
 					fprintf(stdout, "%9ld ", dn->dstat.st_size);
+#endif
 				}
 				column += 10;
 				break;
diff --git a/ls.c b/ls.c
index 03fed5478..b818003a8 100644
--- a/ls.c
+++ b/ls.c
@@ -532,7 +532,11 @@ int list_single(struct dnode *dn)
 				column += 8;
 				break;
 			case LIST_BLOCKS:
+#if _FILE_OFFSET_BITS == 64
+				fprintf(stdout, "%4lld ", dn->dstat.st_blocks>>1);
+#else
 				fprintf(stdout, "%4ld ", dn->dstat.st_blocks>>1);
+#endif
 				column += 5;
 				break;
 			case LIST_MODEBITS:
@@ -578,7 +582,11 @@ int list_single(struct dnode *dn)
 				if (S_ISBLK(dn->dstat.st_mode) || S_ISCHR(dn->dstat.st_mode)) {
 					fprintf(stdout, "%4d, %3d ", (int)MAJOR(dn->dstat.st_rdev), (int)MINOR(dn->dstat.st_rdev));
 				} else {
+#if _FILE_OFFSET_BITS == 64
+					fprintf(stdout, "%9lld ", dn->dstat.st_size);
+#else
 					fprintf(stdout, "%9ld ", dn->dstat.st_size);
+#endif
 				}
 				column += 10;
 				break;
diff --git a/more.c b/more.c
index 12168b519..45b7c1274 100644
--- a/more.c
+++ b/more.c
@@ -123,7 +123,11 @@ extern int more_main(int argc, char **argv)
 				lines = 0;
 				len = fprintf(stdout, "--More-- ");
 				if (file != stdin) {
+#if _FILE_OFFSET_BITS == 64
+					len += fprintf(stdout, "(%d%% of %lld bytes)",
+#else
 					len += fprintf(stdout, "(%d%% of %ld bytes)",
+#endif
 								   (int) (100 *
 										  ((double) ftell(file) /
 										   (double) st.st_size)),
diff --git a/util-linux/more.c b/util-linux/more.c
index 12168b519..45b7c1274 100644
--- a/util-linux/more.c
+++ b/util-linux/more.c
@@ -123,7 +123,11 @@ extern int more_main(int argc, char **argv)
 				lines = 0;
 				len = fprintf(stdout, "--More-- ");
 				if (file != stdin) {
+#if _FILE_OFFSET_BITS == 64
+					len += fprintf(stdout, "(%d%% of %lld bytes)",
+#else
 					len += fprintf(stdout, "(%d%% of %ld bytes)",
+#endif
 								   (int) (100 *
 										  ((double) ftell(file) /
 										   (double) st.st_size)),
-- 
cgit v1.2.3-55-g6feb