bool want_ansi_label;
Dmsg3(100, "Enter read_volume_label device=%s vol=%s dev_Vol=%s\n",
- dev->name(), VolName, dev->VolHdr.VolName);
+ dev->name(), VolName, dev->VolHdr.VolumeName);
if (!dev->is_open()) {
Emsg0(M_ABORT, 0, _("BAD call to read_dev_volume_label\n"));
}
if (dev->is_labeled()) { /* did we already read label? */
/* Compare Volume Names allow special wild card */
- if (VolName && *VolName && *VolName != '*' && strcmp(dev->VolHdr.VolName, VolName) != 0) {
+ if (VolName && *VolName && *VolName != '*' && strcmp(dev->VolHdr.VolumeName, VolName) != 0) {
Mmsg(jcr->errmsg, _("Wrong Volume mounted on device %s: Wanted %s have %s\n"),
- dev->print_name(), VolName, dev->VolHdr.VolName);
+ dev->print_name(), VolName, dev->VolHdr.VolumeName);
/*
* Cancel Job if too many label errors
* => we are in a loop
return VOL_OK; /* label already read */
}
- dev->state &= ~(ST_LABEL|ST_APPEND|ST_READ); /* set no label, no append */
+ dev->clear_labeled();
+ dev->clear_append();
+ dev->clear_read();
dev->label_type = B_BACULA_LABEL;
if (!rewind_dev(dev)) {
}
if (stat == VOL_NAME_ERROR || stat == VOL_LABEL_ERROR) {
Mmsg(jcr->errmsg, _("Wrong Volume mounted on device %s: Wanted %s have %s\n"),
- dev->print_name(), VolName, dev->VolHdr.VolName);
+ dev->print_name(), VolName, dev->VolHdr.VolumeName);
if (!dev->poll && jcr->label_errors++ > 100) {
Jmsg(jcr, M_FATAL, 0, "Too many tries: %s", jcr->errmsg);
}
}
dev->set_labeled(); /* set has Bacula label */
- new_volume(dev->VolHdr.VolName, dev);
+ new_volume(dev->VolHdr.VolumeName, dev);
/* Compare Volume Names */
- Dmsg2(30, "Compare Vol names: VolName=%s hdr=%s\n", VolName?VolName:"*", dev->VolHdr.VolName);
- if (VolName && *VolName && *VolName != '*' && strcmp(dev->VolHdr.VolName, VolName) != 0) {
+ Dmsg2(30, "Compare Vol names: VolName=%s hdr=%s\n", VolName?VolName:"*", dev->VolHdr.VolumeName);
+ if (VolName && *VolName && *VolName != '*' && strcmp(dev->VolHdr.VolumeName, VolName) != 0) {
Mmsg(jcr->errmsg, _("Wrong Volume mounted on device %s: Wanted %s have %s\n"),
- dev->print_name(), VolName, dev->VolHdr.VolName);
+ dev->print_name(), VolName, dev->VolHdr.VolumeName);
Dmsg1(30, "%s", jcr->errmsg);
/*
* Cancel Job if too many label errors
}
return VOL_NAME_ERROR;
}
- Dmsg1(30, "Copy vol_name=%s\n", dev->VolHdr.VolName);
+ Dmsg1(30, "Copy vol_name=%s\n", dev->VolHdr.VolumeName);
if (debug_level >= 10) {
dump_volume_label(dev);
* Writing : returns the label of the current file (on the harddisk).
* Reading : returns an error
*/
-int read_dev_volume_label_guess(DCR *dcr, bool write)
+int read_dvd_volume_label(DCR *dcr, bool write)
{
int vol_label_status;
DEVICE *dev = dcr->dev;
JCR *jcr = dcr->jcr;
- Dmsg3(100, "Enter read_dev_volume_label_guess device=%s vol=%s dev_Vol=%s\n",
- dev->print_name(), dcr->VolumeName, dev->VolHdr.VolName);
+ Dmsg3(100, "Enter: dvd_volume_label device=%s vol=%s dev_Vol=%s\n",
+ dev->print_name(), dcr->VolumeName, dev->VolHdr.VolumeName);
- if (!dev->is_dvd()) {
- Dmsg0(100, "Leave read_dev_volume_label_guess !CAP_REQMOUNT\n");
- return read_dev_volume_label(dcr);
+ if (!dev->is_dvd()) {
+ Jmsg1(jcr, M_ABORT, 0, _("Device %s is not a DVD.\n"), dev->print_name());
+ return -1; /* for compiler, won't get here */
}
if (!write && (dcr->VolCatInfo.VolCatParts == 0)) {
- Dmsg0(100, "Leave read_dev_volume_label_guess !writing, and VolCatParts == 0\n");
+ Dmsg0(100, "Leave read_dvd_volume_label !writing, and VolCatParts == 0\n");
return read_dev_volume_label(dcr);
}
- /* For mounted devices, tries to guess the volume name, and read the label if possible.
- */
- if (open_guess_name_dev(dev) < 0) {
+ /*
+ * For mounted devices, try to guess the Volume name
+ * and read the label if possible.
+ */
+ if (!can_open_mounted_dev(dev)) {
if (!write || dcr->VolCatInfo.VolCatParts > 0) {
Mmsg2(jcr->errmsg, _("Requested Volume \"%s\" on %s is not a Bacula labeled Volume."),
dev->print_name(), dcr->VolumeName);
- Dmsg0(100, "Leave read_dev_volume_label_guess VOL_NO_LABEL (!open_guess_name_dev)\n");
+ Dmsg0(100, "Leave read_dvd_volume_label VOL_NO_LABEL (!open_mounted_dev)\n");
return VOL_NO_LABEL;
}
- if (write && dev->free_space_errno < 0) {
- Dmsg0(100, "Leave read_dev_volume_label_guess !free_space VOL_NO_MEDIA\n");
+ /* At this point, we are writing */
+ if (dev->free_space_errno < 0) {
+ Dmsg0(100, "Exit: read_dvd_volume_label !free_space VOL_NO_MEDIA\n");
Mmsg2(jcr->errmsg, _("free_space error on %s. The current medium is probably not writable: ERR=%s.\n"),
dev->print_name(), dev->errmsg);
return VOL_NO_MEDIA;
}
- /* If we can't guess the name, and we are writing, just reopen the right file with open_first_part. */
- if (open_first_part(dev) < 0) {
+ /*
+ * If we can't guess the name, and we are writing,
+ * just reopen the right file with open_first_part.
+ */
+ if (open_first_part(dev, OPEN_READ_WRITE) < 0) {
berrno be;
Mmsg2(jcr->errmsg, _("open_first_part error on %s: ERR=%s.\n"),
dev->print_name(), be.strerror());
- Dmsg0(100, "Leave read_dev_volume_label_guess VOL_IO_ERROR (!open_guess_name_dev && !open_first_part)\n");
+ Dmsg0(100, "Leave read_dvd_volume_label VOL_IO_ERROR (!open_mounted_dev && !open_first_part)\n");
return VOL_IO_ERROR;
}
- Dmsg0(100, "Leave read_dev_volume_label_guess !open_guess_name_dev\n");
+ Dmsg0(100, "Leave read_dvd_volume_label !open_mounted_dev\n");
return read_dev_volume_label(dcr);
+
} else {
+ /*
+ * If we get here, we can open the mounted device
+ */
if (write && dcr->dev->free_space_errno < 0) {
- Dmsg0(100, "Leave read_dev_volume_label_guess !free_space VOL_NO_MEDIA\n");
+ Dmsg0(100, "Leave read_dvd_volume_label !free_space VOL_NO_MEDIA\n");
Mmsg2(jcr->errmsg, _("free_space error on %s. The current medium is probably not writable: ERR=%s.\n"),
dev->print_name(), dev->errmsg);
return VOL_NO_MEDIA;
}
- vol_label_status = read_dev_volume_label(dcr);
-
if (!write || dcr->VolCatInfo.VolCatParts > 0) {
- Dmsg0(100, "Leave read_dev_volume_label_guess (open_guess_name_dev && (!write || dcr->VolCatInfo.VolCatParts > 0))\n");
- return vol_label_status;
+ Dmsg0(100, "Exit: read_dvd_volume_label (open_mounted_dev && (!write || dcr->VolCatInfo.VolCatParts > 0))\n");
+ return read_dev_volume_label(dcr);
}
- if (open_first_part(dcr->dev) < 0) {
+ /* At this point, we are writing */
+ if (open_first_part(dcr->dev, OPEN_READ_WRITE) < 0) {
berrno be;
Mmsg2(jcr->errmsg, _("open_first_part error on %s: ERR=%s.\n"),
dev->print_name(), be.strerror());
- Dmsg0(100, "Leave read_dev_volume_label_guess VOL_IO_ERROR (open_guess_name_dev && !open_first_part)\n");
+ Dmsg0(100, "Leave read_dvd_volume_label VOL_IO_ERROR (open_mounted_dev && !open_first_part)\n");
return VOL_IO_ERROR;
}
+ vol_label_status = read_dev_volume_label(dcr);
- /* When writing, if the guessed volume name is no the right volume name,
+ /* When writing, if the guessed volume name is not the right volume name,
* report the error, otherwise, just continue with the right file.
*/
if (vol_label_status != VOL_NAME_ERROR) {
- Dmsg0(100, "Leave read_dev_volume_label_guess (open_guess_name_dev && !VOL_NAME_ERROR)\n");
+ Dmsg0(100, "Leave read_dvd_volume_label (open_mounted_dev && !VOL_NAME_ERROR)\n");
dev->clear_labeled();
return read_dev_volume_label(dcr);
} else {
- Dmsg0(100, "Leave read_dev_volume_label_guess (open_guess_name_dev && VOL_NAME_ERROR)\n");
+ Dmsg0(100, "Leave read_dvd_volume_label (open_mounted_dev && VOL_NAME_ERROR)\n");
return vol_label_status;
}
}
if (weof_dev(dev, 1) == 0) {
dev->set_labeled();
- write_ansi_ibm_labels(dcr, ANSI_EOF_LABEL, dev->VolHdr.VolName);
+ write_ansi_ibm_labels(dcr, ANSI_EOF_LABEL, dev->VolHdr.VolumeName);
}
if (debug_level >= 20) {
rewind_dev(dev);
return false;
}
- } else if (!write_ansi_ibm_labels (dcr, ANSI_VOL_LABEL, dev->VolHdr.VolName)) {
+ } else if (!write_ansi_ibm_labels(dcr, ANSI_VOL_LABEL, dev->VolHdr.VolumeName)) {
return false;
}
ser_float64(dev->VolHdr.write_date); /* 0 if VerNum >= 11 */
ser_float64(dev->VolHdr.write_time); /* 0 if VerNum >= 11 */
- ser_string(dev->VolHdr.VolName);
- ser_string(dev->VolHdr.PrevVolName);
+ ser_string(dev->VolHdr.VolumeName);
+ ser_string(dev->VolHdr.PrevVolumeName);
ser_string(dev->VolHdr.PoolName);
ser_string(dev->VolHdr.PoolType);
ser_string(dev->VolHdr.MediaType);
bstrncpy(dev->VolHdr.Id, BaculaId, sizeof(dev->VolHdr.Id));
dev->VolHdr.VerNum = BaculaTapeVersion;
dev->VolHdr.LabelType = PRE_LABEL; /* Mark tape as unused */
- bstrncpy(dev->VolHdr.VolName, VolName, sizeof(dev->VolHdr.VolName));
+ bstrncpy(dev->VolHdr.VolumeName, VolName, sizeof(dev->VolHdr.VolumeName));
bstrncpy(dev->VolHdr.PoolName, PoolName, sizeof(dev->VolHdr.PoolName));
bstrncpy(dev->VolHdr.MediaType, device->media_type, sizeof(dev->VolHdr.MediaType));
unser_float64(dev->VolHdr.write_date); /* Unused with VerNum >= 11 */
unser_float64(dev->VolHdr.write_time); /* Unused with VerNum >= 11 */
- unser_string(dev->VolHdr.VolName);
- unser_string(dev->VolHdr.PrevVolName);
+ unser_string(dev->VolHdr.VolumeName);
+ unser_string(dev->VolHdr.PrevVolumeName);
unser_string(dev->VolHdr.PoolName);
unser_string(dev->VolHdr.PoolType);
unser_string(dev->VolHdr.MediaType);
"HostName : %s\n"
"",
dev->VolHdr.Id, dev->VolHdr.VerNum,
- dev->VolHdr.VolName, dev->VolHdr.PrevVolName,
+ dev->VolHdr.VolumeName, dev->VolHdr.PrevVolumeName,
File, LabelType, dev->VolHdr.LabelSize,
dev->VolHdr.PoolName, dev->VolHdr.MediaType,
dev->VolHdr.PoolType, dev->VolHdr.HostName);