Add HUMAN_READABLE define for -m and -h support in du, df, and ls
Add support for -k in du, df, and ls(no define, it's for compatibliity with the GNU utils as bb does -k by default)
Fix bug #1084
diff --git a/coreutils/ls.c b/coreutils/ls.c
index fa3e542..754a6d4 100644
--- a/coreutils/ls.c
+++ b/coreutils/ls.c
@@ -176,6 +176,10 @@
 
 static int status = EXIT_SUCCESS;
 
+#ifdef BB_FEATURE_HUMAN_READABLE
+unsigned long ls_disp_hr = KILOBYTE;
+#endif
+
 static int my_stat(struct dnode *cur)
 {
 #ifdef BB_FEATURE_LS_FOLLOWLINKS
@@ -583,11 +587,15 @@
 				column += 8;
 				break;
 			case LIST_BLOCKS:
+#ifdef BB_FEATURE_HUMAN_READABLE
+				fprintf(stdout, "%5s ", format(dn->dstat.st_size, ls_disp_hr));
+#else
 #if _FILE_OFFSET_BITS == 64
 				printf("%4lld ", dn->dstat.st_blocks>>1);
 #else
 				printf("%4ld ", dn->dstat.st_blocks>>1);
 #endif
+#endif
 				column += 5;
 				break;
 			case LIST_MODEBITS:
@@ -622,11 +630,15 @@
 				if (S_ISBLK(dn->dstat.st_mode) || S_ISCHR(dn->dstat.st_mode)) {
 					printf("%4d, %3d ", (int)MAJOR(dn->dstat.st_rdev), (int)MINOR(dn->dstat.st_rdev));
 				} else {
+#ifdef BB_FEATURE_HUMAN_READABLE
+					fprintf(stdout, "%9s ", format(dn->dstat.st_size, ls_disp_hr));
+#else
 #if _FILE_OFFSET_BITS == 64
 					printf("%9lld ", dn->dstat.st_size);
 #else
 					printf("%9ld ", dn->dstat.st_size);
 #endif
+#endif
 				}
 				column += 10;
 				break;
@@ -724,7 +736,10 @@
 #ifdef BB_FEATURE_LS_FOLLOWLINKS
 "L"
 #endif
-	)) > 0) {
+#ifdef BB_FEATURE_HUMAN_READABLE
+"h"
+#endif
+"k")) > 0) {
 		switch (opt) {
 			case '1': style_fmt = STYLE_SINGLE; break;
 			case 'A': disp_opts |= DISP_HIDDEN; break;
@@ -733,7 +748,13 @@
 			case 'd': disp_opts |= DISP_NOLIST; break;
 			case 'g': /* ignore -- for ftp servers */ break;
 			case 'i': list_fmt |= LIST_INO; break;
-			case 'l': style_fmt = STYLE_LONG; list_fmt |= LIST_LONG; break;
+			case 'l':
+				style_fmt = STYLE_LONG;
+				list_fmt |= LIST_LONG;
+#ifdef BB_FEATURE_HUMAN_READABLE
+				ls_disp_hr = 1;
+#endif
+			break;
 			case 'n': list_fmt |= LIST_ID_NUMERIC; break;
 			case 's': list_fmt |= LIST_BLOCKS; break;
 			case 'x': disp_opts = DISP_ROWS; break;
@@ -777,6 +798,12 @@
 			case 'T': tabstops= atoi(optarg); break;
 			case 'w': terminal_width= atoi(optarg); break;
 #endif
+#ifdef BB_FEATURE_HUMAN_READABLE
+			case 'h': ls_disp_hr = 0; break;
+			case 'k': ls_disp_hr = KILOBYTE; break;
+#else
+			case 'k': break;
+#endif
 			default:
 				goto print_usage_message;
 		}