Large file >2Gib support.
diff --git a/Makefile b/Makefile
index 278887f..6a9c694 100644
--- a/Makefile
+++ b/Makefile
@@ -40,6 +40,16 @@
 # 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 @@
 
 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 03fed54..b818003 100644
--- a/coreutils/ls.c
+++ b/coreutils/ls.c
@@ -532,7 +532,11 @@
 				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 @@
 				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 03fed54..b818003 100644
--- a/ls.c
+++ b/ls.c
@@ -532,7 +532,11 @@
 				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 @@
 				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 12168b5..45b7c12 100644
--- a/more.c
+++ b/more.c
@@ -123,7 +123,11 @@
 				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 12168b5..45b7c12 100644
--- a/util-linux/more.c
+++ b/util-linux/more.c
@@ -123,7 +123,11 @@
 				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)),