last_patch89 from vodz:

    Manuel,

    I rewrite bb_getopt_ulflags() function for more universal usage.
    My version support now:
    - options with arguments (optional arg as GNU extension also)
    - complementaly and/or incomplementaly and/or incongruously and/or list
    options
    - long_opt (all applets may have long option, add supporting is trivial)
    This realisation full compatibile from your version.
    Code size grow 480 bytes, but only coreutils/* over compensate this size
    after using new function. Last patch reduced over 800 bytes and not full
    applied to all. "mkdir" and "mv" applets have long_opt now for demonstrate
    trivial addition support long_opt with usage new bb_getopt_ulflags().
    Complementaly and/or incomplementaly and/or incongruously and/or list options
    logic is not trivial, but new "cut" and "grep" applets using this logic
    for examples with full demostrating. New "grep" applet reduced over 300
    bytes.

    Mark,
    Also. I removed bug from "grep" applet.
    $ echo a b | busybox grep -e a b
    a b
    a b
    But right is printing one only.

    --w
    vodz
diff --git a/coreutils/df.c b/coreutils/df.c
index 708e12c..9673633 100644
--- a/coreutils/df.c
+++ b/coreutils/df.c
@@ -55,41 +55,27 @@
 	unsigned long df_disp_hr = KILOBYTE; 
 #endif
 	int status = EXIT_SUCCESS;
-	int opt;
+	unsigned long opt;
 	FILE *mount_table;
 	struct mntent *mount_entry;
 	struct statfs s;
 	static const char hdr_1k[] = "1k-blocks"; /* default display is kilobytes */
 	const char *disp_units_hdr = hdr_1k;
 
-	while ((opt = getopt(argc, argv, "k"
 #ifdef CONFIG_FEATURE_HUMAN_READABLE
-	"hm"
-#endif
-)) > 0)
-	{
-		switch (opt) {
-#ifdef CONFIG_FEATURE_HUMAN_READABLE
-			case 'h':
+	bb_opt_complementaly = "h-km:k-hm:m-hk";
+	opt = bb_getopt_ulflags(argc, argv, "hmk");
+	if(opt & 1) {
 				df_disp_hr = 0;
 				disp_units_hdr = "     Size";
-				break;
-			case 'm':
+	}
+	if(opt & 2) {
 				df_disp_hr = MEGABYTE;
 				disp_units_hdr = "1M-blocks";
-				break;
-#endif
-			case 'k':
-				/* default display is kilobytes */
-#ifdef CONFIG_FEATURE_HUMAN_READABLE
-				df_disp_hr = KILOBYTE;
-				disp_units_hdr =  hdr_1k;
-#endif
-				break;
-			default:
-					  bb_show_usage();
-		}
 	}
+#else
+	opt = bb_getopt_ulflags(argc, argv, "k");
+#endif
 
 	bb_printf("Filesystem%11s%-15sUsed Available Use%% Mounted on\n",
 			  "", disp_units_hdr);