[FSUTIL]
authorPierre Schweitzer <pierre@reactos.org>
Wed, 20 Sep 2017 11:41:28 +0000 (11:41 +0000)
committerPierre Schweitzer <pierre@reactos.org>
Wed, 20 Sep 2017 11:41:28 +0000 (11:41 +0000)
Implement fsutil volume diskfree

svn path=/trunk/; revision=75913

reactos/base/applications/cmdutils/fsutil/volume.c

index 379797f..abd31c6 100644 (file)
 
 /* Add handlers here for subcommands */
 static HandlerProc DismountMain;
+static HandlerProc DiskFreeMain;
 static HandlerItem HandlersList[] =
 {
     /* Proc, name, help */
     { DismountMain, _T("dismount"), _T("Dismounts a volume") },
+    { DiskFreeMain, _T("diskfree"), _T("Prints free space on a volume") },
 };
 
 static int
@@ -80,6 +82,32 @@ DismountMain(int argc, const TCHAR *argv[])
     return 0;
 }
 
+static int
+DiskFreeMain(int argc, const TCHAR *argv[])
+{
+    ULARGE_INTEGER FreeAvail, TotalNumber, TotalNumberFree;
+
+    /* We need a path */
+    if (argc < 2)
+    {
+        _ftprintf(stderr, _T("Usage: fsutil volume diskfree <volume path>\n"));
+        _ftprintf(stderr, _T("\tFor example: fsutil volume diskfree c:\n"));
+        return 1;
+    }
+
+    if (!GetDiskFreeSpaceEx(argv[1], &FreeAvail, &TotalNumber, &TotalNumberFree))
+    {
+        PrintErrorMessage(GetLastError());
+        return 1;
+    }
+
+    _ftprintf(stdout, _T("Total free bytes\t\t: %I64i\n"), TotalNumberFree.QuadPart);
+    _ftprintf(stdout, _T("Total bytes\t\t\t: %I64i\n"), TotalNumber.QuadPart);
+    _ftprintf(stdout, _T("Total free available bytes\t: %I64i\n"), FreeAvail.QuadPart);
+
+    return 0;
+}
+
 static void
 PrintUsage(const TCHAR * Command)
 {