]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/stored/dev.c
kes Make sure valid argument passed to str_to_utime() where Arno
[bacula/bacula] / bacula / src / stored / dev.c
index b52f92353b737bf546032657e18082c4e7ece6e8..331e7a5faa3947f6d2aa6abc19b6c79472f2d8f9 100644 (file)
@@ -518,6 +518,23 @@ void DEVICE::open_dvd_device(DCR *dcr, int omode)
    if (num_dvd_parts != VolCatInfo.VolCatParts) {
       num_dvd_parts = VolCatInfo.VolCatParts;
    }
+
+   /*
+    * If we are not trying to access the last part, set mode to 
+    *   OPEN_READ_ONLY as writing would be an error.
+    */
+   Dmsg2(29, "open DVD part=%d num_dvd_parts=%d\n", part, num_dvd_parts);
+   if (part <= num_dvd_parts) {
+      omode = OPEN_READ_ONLY;
+      make_mounted_dvd_filename(this, archive_name);
+      set_part_spooled(false);
+   } else {
+      omode = OPEN_READ_WRITE;
+      make_spooled_dvd_filename(this, archive_name);
+      set_part_spooled(true);
+   }
+   set_mode(omode);
+
    // Clear any previous truncated_dvd status - we will recalculate it here
    truncated_dvd = false;
 
@@ -574,19 +591,6 @@ void DEVICE::open_dvd_device(DCR *dcr, int omode)
    openmode = omode;
    Dmsg2(100, "openmode=%d %s\n", openmode, mode_to_str(openmode));
    
-   /*
-    * If we are not trying to access the last part, set mode to 
-    *   OPEN_READ_ONLY as writing would be an error.
-    */
-   Dmsg2(29, "open DVD part=%d num_dvd_parts=%d\n", part, num_dvd_parts);
-   if (part <= num_dvd_parts) {
-      omode = OPEN_READ_ONLY;
-      make_mounted_dvd_filename(this, archive_name);
-   } else {
-      omode = OPEN_READ_WRITE;
-      make_spooled_dvd_filename(this, archive_name);
-   }
-   set_mode(omode);
 
    /* If creating file, give 0640 permissions */
    Dmsg3(29, "mode=%s open(%s, 0x%x, 0640)\n", mode_to_str(omode), 
@@ -1778,7 +1782,7 @@ void DEVICE::close()
    /* Remove the last part file if it is empty */
    if (num_dvd_parts > 0) {
       struct stat statp;
-      int part_save = part;
+      uint32_t part_save = part;
       POOL_MEM archive_name(PM_FNAME);
       int status;
 
@@ -1791,9 +1795,13 @@ void DEVICE::close()
                 part, num_dvd_parts, VolCatInfo.VolCatName);
          Dmsg1(100, "unlink(%s)\n", archive_name.c_str());
          unlink(archive_name.c_str());
-         set_part_spooled(false);        /* no spooled part left */
+         if (part_save == part) {
+           set_part_spooled(false);        /* no spooled part left */
+         }
       } else if (status < 0) {                         
-         set_part_spooled(false);        /* spool doesn't exit */
+         if (part_save == part) {
+           set_part_spooled(false);        /* spool doesn't exit */
+         }
       }       
       part = part_save;               /* restore part number */
    }