Adjust Erik's change, as I don't claim copyright of the applet.
[oweals/busybox.git] / coreutils / df.c
index 7d007a0034068abcb3378fd907f9cd8ba4ed3ac5..9c0d13f62b46cd64bb3a9fe9dce4c3e58a0e89d0 100644 (file)
@@ -2,8 +2,7 @@
 /*
  * Mini df implementation for busybox
  *
- * Copyright (C) 1999,2000 by Lineo, inc. and Erik Andersen
- * Copyright (C) 1999,2000,2001 by Erik Andersen <andersee@debian.org>
+ * Copyright (C) 1999-2003 by Erik Andersen <andersen@codepoet.org>
  * based on original code by (I think) Bruce Perens <bruce@pixar.com>.
  *
  * This program is free software; you can redistribute it and/or modify
@@ -55,41 +54,27 @@ extern int df_main(int argc, char **argv)
        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 */;
+       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);
@@ -140,10 +125,12 @@ extern int df_main(int argc, char **argv)
                                                                           ) / (blocks_used + s.f_bavail);
                        }
                        
-                       if (strcmp(device, "/dev/root") == 0) {
+                       if (strcmp(device, "rootfs") == 0) {
+                               continue;
+                       } else if (strcmp(device, "/dev/root") == 0) {
                                /* Adjusts device to be the real root device,
                                * or leaves device alone if it can't find it */
-                               if ((device = find_real_root_device_name(device)) != NULL) {
+                               if ((device = find_real_root_device_name(device)) == NULL) {
                                        goto SET_ERROR;
                                }
                        }