/*
*
* Utility routines for "tool" programs such as bscan, bls,
- * bextract, ...
+ * bextract, ... Some routines also used by Bacula.
*
* Normally nothing in this file is called by the Storage
* daemon because we interact more directly with the user
DEVICE *setup_to_access_device(JCR *jcr, int read_access)
{
DEVICE *dev;
- DEV_BLOCK *block;
char *p;
DEVRES *device;
dev = init_dev(NULL, device);
jcr->device->dev = dev;
- if (!dev || !open_device(dev)) {
+ if (!dev || !first_open_device(dev)) {
Jmsg1(jcr, M_FATAL, 0, _("Cannot open %s\n"), jcr->dev_name);
return NULL;
}
Dmsg0(90, "Device opened for read.\n");
- block = new_block(dev);
-
create_vol_list(jcr);
if (read_access) {
- if (!acquire_device_for_read(jcr, dev, block)) {
- free_block(block);
+ if (!acquire_device_for_read(jcr)) {
return NULL;
}
}
- free_block(block);
return dev;
}
if (jcr->VolList) {
free_vol_list(jcr);
}
+ if (jcr->dcr) {
+ free_dcr(jcr->dcr);
+ jcr->dcr = NULL;
+ }
return;
}
pm_strcpy(&jcr->fileset_name, "Dummy.fileset.name");
jcr->fileset_md5 = get_pool_memory(PM_FNAME);
pm_strcpy(&jcr->fileset_md5, "Dummy.fileset.md5");
- jcr->JobId = 1;
- jcr->JobType = JT_BACKUP;
+ jcr->JobId = 0;
+ jcr->JobType = JT_CONSOLE;
jcr->JobLevel = L_FULL;
jcr->JobStatus = JS_Terminated;
jcr->dev_name = get_pool_memory(PM_FNAME);
{
uint32_t status;
- Jmsg(jcr, M_ERROR, 0, "%s", dev->errmsg);
- status_dev(dev, &status);
+ status = status_dev(dev);
Dmsg1(20, "Device status: %x\n", status);
if (status & BMT_EOD)
Jmsg(jcr, M_ERROR, 0, _("Unexpected End of Data\n"));
- else if (status & BMT_EOT)
+ else if (status & BMT_EOT)
Jmsg(jcr, M_ERROR, 0, _("Unexpected End of Tape\n"));
else if (status & BMT_EOF)
Jmsg(jcr, M_ERROR, 0, _("Unexpected End of File\n"));
Jmsg(jcr, M_ERROR, 0, _("Tape Door is Open\n"));
else if (!(status & BMT_ONLINE))
Jmsg(jcr, M_ERROR, 0, _("Unexpected Tape is Off-line\n"));
- else
- Jmsg(jcr, M_ERROR, 0, _("Read error on Record Header %s: %s\n"), dev_name(dev), strerror(errno));
}