Change btrfs filesystem df to allow the user to control the scales
used for sizes in the output.

Signed-off-by: Hugo Mills <h...@carfax.org.uk>
---
 btrfs.c        |    6 +++---
 btrfs_cmds.c   |   42 ++++++++++++++++++++++++++++++++++++------
 man/btrfs.8.in |    8 ++++++++
 3 files changed, 47 insertions(+), 9 deletions(-)

Index: btrfs-progs-unstable/btrfs.c
===================================================================
--- btrfs-progs-unstable.orig/btrfs.c   2010-10-20 19:12:18.000000000 +0100
+++ btrfs-progs-unstable/btrfs.c        2010-10-20 19:48:34.000000000 +0100
@@ -87,9 +87,9 @@
                "Show the info of a btrfs filesystem. If no <uuid> or <label>\n"
                "is passed, info of all the btrfs filesystem are shown."
        },
-       { do_df_filesystem, 1,
-         "filesystem df", "<path>\n"
-               "Show space usage information for a mount point\n."
+       { do_df_filesystem, -1,
+         "filesystem df", "[options] <path>\n"
+               "Show space usage information for a mount point."
        },
        { do_balance, 1,
          "filesystem balance", "<path>\n"
Index: btrfs-progs-unstable/btrfs_cmds.c
===================================================================
--- btrfs-progs-unstable.orig/btrfs_cmds.c      2010-10-20 19:19:20.000000000 
+0100
+++ btrfs-progs-unstable/btrfs_cmds.c   2010-10-20 19:58:48.000000000 +0100
@@ -14,7 +14,6 @@
  * Boston, MA 021110-1307, USA.
  */
 
-
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
@@ -28,6 +27,7 @@
 #include <limits.h>
 #include <uuid/uuid.h>
 #include <ctype.h>
+#include <getopt.h>
 
 #undef ULONG_MAX
 
@@ -835,13 +835,45 @@
        return 0;
 }
 
+const struct option df_options[] = {
+       { "human-readable", 0, NULL, 'h' },
+       { "si", 0, NULL, 'H' },
+       { NULL, 0, NULL, 0 }
+};
+
 int do_df_filesystem(int nargs, char **argv)
 {
        struct btrfs_ioctl_space_args *sargs;
        u64 count = 0, i;
        int ret;
        int fd;
-       char *path = argv[1];
+       char *path;
+       int format = PRETTY_SIZE_RAW;
+
+       optind = 1;
+       while(1) {
+               int c = getopt_long(nargs, argv, "hH", df_options, NULL);
+               if (c < 0)
+                       break;
+               switch(c) {
+               case 'h':
+                       format = PRETTY_SIZE_BINARY;
+                       break;
+               case 'H':
+                       format = PRETTY_SIZE_ISO;
+                       break;
+               default:
+                       fprintf(stderr, "Invalid arguments for df\n");
+                       free(argv);
+                       return 1;
+               }
+       }
+       if (nargs - optind != 1) {
+               fprintf(stderr, "No path given for df\n");
+               free(argv);
+               return 1;
+       }
+       path = argv[optind];
 
        fd = open_file_or_dir(path);
        if (fd < 0) {
@@ -914,10 +946,8 @@
                        written += 8;
                }
 
-               total_bytes = pretty_sizes(sargs->spaces[i].total_bytes,
-                                                                       
PRETTY_SIZE_RAW);
-               used_bytes = pretty_sizes(sargs->spaces[i].used_bytes,
-                                                                       
PRETTY_SIZE_RAW);
+               total_bytes = pretty_sizes(sargs->spaces[i].total_bytes, 
format);
+               used_bytes = pretty_sizes(sargs->spaces[i].used_bytes, format);
                printf("%s: total=%s, used=%s\n", description, total_bytes,
                       used_bytes);
        }
Index: btrfs-progs-unstable/man/btrfs.8.in
===================================================================
--- btrfs-progs-unstable.orig/man/btrfs.8.in    2010-10-20 19:23:36.000000000 
+0100
+++ btrfs-progs-unstable/man/btrfs.8.in 2010-10-20 19:28:14.000000000 +0100
@@ -21,6 +21,8 @@
 .PP
 \fBbtrfs\fP \fBfilesystem resize\fP\fI [+/\-]<size>[gkm]|max <filesystem>\fP
 .PP
+\fBbtrfs\fP \fBfilesystem df\fP\fI [options] <path>\fP
+.PP
 \fBbtrfs\fP \fBdevice scan\fP\fI [<device> [<device>..]]\fP
 .PP
 \fBbtrfs\fP \fBdevice show\fP\fI <dev>|<label> [<dev>|<label>...]\fP
@@ -143,6 +145,12 @@
 passed, \fBbtrfs\fR show info of all the btrfs filesystem.
 .TP
 
+\fBfilesystem df\fR [options] <path>\fR
+Show the amount of space used on this filesystem, in bytes. Options:
+-h, --human-readable Use powers of 2^10 (1024) to report sizes.
+-H, --si Use powers of 10^3 (1000) to report sizes, in SI multiples.
+.TP
+
 \fBdevice balance\fR \fI<path>\fR
 Balance the chunks of the filesystem identified by \fI<path>\fR
 across the devices.

-- 
=== Hugo Mills: h...@... carfax.org.uk | darksatanic.net | lug.org.uk ===
  PGP key: 515C238D from wwwkeys.eu.pgp.net or http://www.carfax.org.uk
   --- I spent most of my money on drink, women and fast cars. The ---   
                      rest I wasted.  -- James Hunt                      

--
To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to