]> git.sur5r.net Git - bacula/bacula/commitdiff
Fix btape test which counted files incorrectly on EOT
authorKern Sibbald <kern@sibbald.com>
Sat, 22 Jul 2017 16:09:19 +0000 (18:09 +0200)
committerKern Sibbald <kern@sibbald.com>
Sat, 22 Jul 2017 16:09:19 +0000 (18:09 +0200)
bacula/src/stored/btape.c
bacula/src/stored/tape_dev.c

index f6e50c1a12c92206cc91f1db54353b4b55282f47..e88a9b7934227c3f1cdf2c849799edc9019423f1 100644 (file)
@@ -1966,7 +1966,7 @@ static void scancmd()
 
    blocks = block_size = tot_blocks = 0;
    bytes = 0;
-   if (dev->state & ST_EOT) {
+   if (dev->at_eot()) {
       Pmsg0(0, _("End of tape\n"));
       return;
    }
@@ -2009,18 +2009,17 @@ static void scancmd()
          dev->update_pos(dcr);
          printf(_("End of File mark.\n"));
          /* Two reads of zero means end of tape */
-         if (dev->state & ST_EOF)
-            dev->state |= ST_EOT;
-         else {
-            dev->state |= ST_EOF;
-            dev->file++;
+         if (dev->at_eof()) {
+            dev->set_ateot();
+         } else {
+            dev->set_ateof();
          }
-         if (dev->state & ST_EOT) {
+         if (dev->at_eot()) {
             printf(_("End of tape\n"));
             break;
          }
       } else {                        /* Got data */
-         dev->state &= ~ST_EOF;
+         dev->clear_eof();
          blocks++;
          tot_blocks++;
          bytes += stat;
@@ -2057,7 +2056,7 @@ static void scan_blocks()
    for (;;) {
       if (!dcr->read_block_from_device(NO_BLOCK_NUMBER_CHECK)) {
          Dmsg1(100, "!read_block(): ERR=%s\n", dev->bstrerror());
-         if (dev->state & ST_EOT) {
+         if (dev->at_eot()) {
             if (blocks > 0) {
                if (blocks==1) {
                   printf(_("1 block of %d bytes in file %d\n"), block_size, dev->file);
index 908149a8d301a00bdb961a757e297fe29116f08b..cb5e9b749968900678781671ee510e6546645588 100644 (file)
@@ -1059,6 +1059,9 @@ bool tape_dev::mount_tape(int mount, int dotimeout)
 
 void tape_dev::set_ateof()
 {
+   if (at_eof()) {
+      return;
+   }
    DEVICE::set_ateof();
    file++;
 }