]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/stored/bls.c
Make btape fill/unfill work
[bacula/bacula] / bacula / src / stored / bls.c
index 6c2ec78ca92c95cfac68762a5648fc94856efb45..1784f6c4541d55e0d8ab7f6661d7b89acebb3668 100644 (file)
@@ -39,7 +39,6 @@ static DEVICE *dev;
 static int dump_label = FALSE;
 static int list_blocks = FALSE;
 static int list_jobs = FALSE;
-static int verbose = 0;
 static DEV_RECORD *rec;
 static DEV_BLOCK *block;
 static JCR *jcr;
@@ -67,9 +66,9 @@ static void usage()
 "       -i <file>       include list\n"
 "       -j              list jobs\n"
 "       -k              list blocks\n"
-"       -L              list tape label\n"
 "    (none of above)    list saved files\n"
 "       -v              be verbose\n"
+"       -V              specify Volume names (separated by |)\n"
 "       -?              print this message\n\n");
    exit(1);
 }
@@ -80,6 +79,8 @@ int main (int argc, char *argv[])
    int i, ch;
    FILE *fd;
    char line[1000];
+   char *VolumeName= NULL;
+   char *bsrName = NULL;
 
    working_directory = "/tmp";
    my_name_is(argc, argv, "bls");
@@ -88,11 +89,10 @@ int main (int argc, char *argv[])
    memset(&ff, 0, sizeof(ff));
    init_include_exclude_files(&ff);
 
-   while ((ch = getopt(argc, argv, "b:c:d:e:i:jkLtv?")) != -1) {
+   while ((ch = getopt(argc, argv, "b:c:d:e:i:jkLtvV:?")) != -1) {
       switch (ch) {
          case 'b':
-           bsr = parse_bsr(NULL, optarg);
-//         dump_bsr(bsr);
+           bsrName = optarg;
            break;
 
          case 'c':                    /* specify config file */
@@ -152,6 +152,10 @@ int main (int argc, char *argv[])
            verbose++;
            break;
 
+         case 'V':                    /* Volume name */
+           VolumeName = optarg;
+           break;
+
          case '?':
         default:
            usage();
@@ -162,7 +166,7 @@ int main (int argc, char *argv[])
    argv += optind;
 
    if (!argc) {
-      Pmsg0(0, "No archive name specified\n");
+      Pmsg0(0, _("No archive name specified\n"));
       usage();
    }
 
@@ -172,13 +176,15 @@ int main (int argc, char *argv[])
 
    parse_config(configfile);
 
-
    if (ff.included_files_list == NULL) {
       add_fname_to_include_list(&ff, 0, "/");
    }
 
    for (i=0; i < argc; i++) {
-      jcr = setup_jcr("bls", argv[i], bsr);
+      if (bsrName) {
+        bsr = parse_bsr(NULL, bsrName);
+      }
+      jcr = setup_jcr("bls", argv[i], bsr, VolumeName);
       dev = setup_to_access_device(jcr, 1);   /* acquire for read */
       if (!dev) {
         exit(1);
@@ -229,7 +235,7 @@ static void do_blocks(char *infname)
       rec = new_record();
    }
    for ( ;; ) {
-      if (!read_block_from_device(dev, block)) {
+      if (!read_block_from_device(jcr, dev, block, NO_BLOCK_NUMBER_CHECK)) {
          Dmsg1(100, "!read_block(): ERR=%s\n", strerror_dev(dev));
         if (dev->state & ST_EOT) {
            if (!mount_next_read_volume(jcr, dev, block)) {
@@ -238,7 +244,7 @@ static void do_blocks(char *infname)
            }
            DEV_RECORD *record;
            record = new_record();
-           read_block_from_device(dev, block);
+           read_block_from_device(jcr, dev, block, NO_BLOCK_NUMBER_CHECK);
            read_record_from_block(block, record);
            get_session_record(dev, record, &sessrec);
            free_record(record);
@@ -301,7 +307,6 @@ static void do_ls(char *infname)
       dump_volume_label(dev);
       return;
    }
-
    read_records(jcr, dev, record_cb, mount_next_read_volume);
    printf("%u files found.\n", num_files);
 }