]> git.sur5r.net Git - bacula/bacula/commitdiff
Add -l and -a options to drivetype tool
authorEric Bollengier <eric@eb.homelinux.org>
Wed, 27 Oct 2010 13:36:05 +0000 (15:36 +0200)
committerEric Bollengier <eric@eb.homelinux.org>
Fri, 12 Nov 2010 08:24:26 +0000 (09:24 +0100)
These switchs permit to display the list of all local hardrive on a windows box
drivetype.exe -l -a
c:\
d:\
e:\

bacula/src/tools/drivetype.c

index 7aaa74edc0df97296b307f67ba71eb6d846956c4..0a630385d3de6c995916fa2fbc605f03751fbee5 100644 (file)
@@ -50,6 +50,8 @@ static void usage()
 "       Print the drive type a given file/directory is on.\n"
 "       The following options are supported:\n"
 "\n"
+"       -l     print local fixed hard drive\n"
+"       -a     display information on all drives\n"
 "       -v     print both path and file system type.\n"
 "       -?     print this message.\n"
 "\n"));
@@ -57,24 +59,54 @@ static void usage()
    exit(1);
 }
 
+int display_drive(char *drive, bool display_local, int verbose)
+{
+   char dt[100];
+   int status = 0;
+
+   if (drivetype(drive, dt, sizeof(dt))) {
+      if (display_local) {      /* in local mode, display only harddrive */
+         if (strcmp(dt, "fixed") == 0) {
+            printf("%s\n", drive);
+         }
+      } else if (verbose) {
+         printf("%s: %s\n", drive, dt);
+      } else {
+         puts(dt);
+      }
+   } else if (!display_local) { /* local mode is used by FileSet scripts */
+      fprintf(stderr, _("%s: unknown\n"), drive);
+      status = 1;
+   }
+   return status;
+}
 
 int
 main (int argc, char *const *argv)
 {
-   char dt[100];
    int verbose = 0;
    int status = 0;
    int ch, i;
+   bool display_local = false;
+   bool display_all = false;
+   char drive='A';
+   char buf[16];
 
    setlocale(LC_ALL, "");
    bindtextdomain("bacula", LOCALEDIR);
    textdomain("bacula");
 
-   while ((ch = getopt(argc, argv, "v?")) != -1) {
+   while ((ch = getopt(argc, argv, "alv?")) != -1) {
       switch (ch) {
          case 'v':
             verbose = 1;
             break;
+         case 'l':
+            display_local = true;
+            break;
+         case 'a':
+            display_all = true;
+            break;
          case '?':
          default:
             usage();
@@ -84,24 +116,23 @@ main (int argc, char *const *argv)
    argc -= optind;
    argv += optind;
 
+   OSDependentInit();
+   if (argc < 1 && display_all) {
+      /* Try all letters */
+      for (drive = 'A'; drive <= 'Z'; drive++) {
+         bsnprintf(buf, sizeof(buf), "%c:/", drive);
+         display_drive(buf, display_local, verbose);
+      }
+      exit(status);
+   }
+
    if (argc < 1) {
       usage();
    }
 
-   OSDependentInit();
    for (i = 0; i < argc; --argc, ++argv) {
-      if (drivetype(*argv, dt, sizeof(dt))) {
-         if (verbose) {
-            printf("%s: %s\n", *argv, dt);
-         } else {
-            puts(dt);
-         }
-      } else {
-         fprintf(stderr, _("%s: unknown\n"), *argv);
-         status = 1;
-      }
+      status += display_drive(*argv, display_local, verbose);
    }
-
    exit(status);
 }