#include "stored.h"
/* Forward referenced functions */
-static bool record_cb(JCR *jcr, DEVICE *dev, DEV_BLOCK *block, DEV_RECORD *rec);
+static bool record_cb(DCR *dcr, DEV_RECORD *rec);
/* Global variables */
static void usage()
{
fprintf(stderr, _(
+"Copyright (C) 2002-2004 Kern Sibbald and John Walker.\n"
"\nVersion: " VERSION " (" BDATE ")\n\n"
"Usage: bcopy [-d debug_level] <input-archive> <output-archive>\n"
" -b bootstrap specify a bootstrap file\n"
case 'd': /* debug level */
debug_level = atoi(optarg);
if (debug_level <= 0)
- debug_level = 1;
+ debug_level = 1;
break;
case 'i': /* input Volume name */
ignore_label_errors = true;
forge_on = true;
break;
-
+
case 'v':
verbose++;
break;
default:
usage();
- }
+ }
}
argc -= optind;
argv += optind;
parse_config(configfile);
/* Setup and acquire input device for reading */
- in_jcr = setup_jcr("bcopy", argv[0], bsr, iVolumeName);
+ in_jcr = setup_jcr("bcopy", argv[0], bsr, iVolumeName, 1); /* read device */
+ if (!in_jcr) {
+ exit(1);
+ }
in_jcr->ignore_label_errors = ignore_label_errors;
- in_dev = setup_to_access_device(in_jcr, 1); /* read device */
- if (!in_dev) {
+ in_dev = in_jcr->dcr->dev;
+ if (!in_dev) {
exit(1);
}
/* Setup output device for writing */
- out_jcr = setup_jcr("bcopy", argv[1], bsr, oVolumeName);
- out_dev = setup_to_access_device(out_jcr, 0); /* no acquire */
- if (!out_dev) {
- exit(1);
+ out_jcr = setup_jcr("bcopy", argv[1], bsr, oVolumeName, 0); /* no acquire */
+ if (!out_jcr) {
+ exit(1);
+ }
+ out_dev = out_jcr->dcr->dev;
+ if (!out_dev) {
+ exit(1);
}
/* For we must now acquire the device for writing */
lock_device(out_dev);
- if (open_dev(out_dev, out_jcr->VolumeName, OPEN_READ_WRITE) < 0) {
+ if (open_dev(out_dev, out_jcr->dcr->VolumeName, OPEN_READ_WRITE) < 0) {
Emsg1(M_FATAL, 0, _("dev open failed: %s\n"), out_dev->errmsg);
unlock_device(out_dev);
exit(1);
out_block = out_jcr->dcr->block;
read_records(in_jcr->dcr, record_cb, mount_next_read_volume);
- if (!write_block_to_device(out_jcr->dcr, out_block)) {
+ if (!write_block_to_device(out_jcr->dcr)) {
Pmsg0(000, _("Write of last block failed.\n"));
}
term_dev(out_dev);
return 0;
}
-
+
/*
* read_records() calls back here for each record it gets
*/
-static bool record_cb(JCR *in_jcr, DEVICE *dev, DEV_BLOCK *block, DEV_RECORD *rec)
+static bool record_cb(DCR *in_dcr, DEV_RECORD *rec)
{
if (list_records) {
Pmsg5(000, _("Record: SessId=%u SessTim=%u FileIndex=%d Stream=%d len=%u\n"),
- rec->VolSessionId, rec->VolSessionTime, rec->FileIndex,
+ rec->VolSessionId, rec->VolSessionTime, rec->FileIndex,
rec->Stream, rec->data_len);
}
- /*
- * Check for Start or End of Session Record
+ /*
+ * Check for Start or End of Session Record
*
*/
if (rec->FileIndex < 0) {
if (verbose > 1) {
- dump_label_record(dev, rec, 1);
+ dump_label_record(in_dcr->dev, rec, 1);
}
switch (rec->FileIndex) {
case PRE_LABEL:
- Pmsg0(000, "Volume is prelabeled. This volume cannot be copied.\n");
+ Pmsg0(000, "Volume is prelabeled. This volume cannot be copied.\n");
return false;
case VOL_LABEL:
- Pmsg0(000, "Volume label not copied.\n");
+ Pmsg0(000, "Volume label not copied.\n");
return true;
case SOS_LABEL:
jobs++;
break;
case EOS_LABEL:
while (!write_record_to_block(out_block, rec)) {
- Dmsg2(150, "!write_record_to_block data_len=%d rem=%d\n", rec->data_len,
+ Dmsg2(150, "!write_record_to_block data_len=%d rem=%d\n", rec->data_len,
rec->remainder);
- if (!write_block_to_device(out_jcr->dcr, out_block)) {
- Dmsg2(90, "Got write_block_to_dev error on device %s. %s\n",
+ if (!write_block_to_device(out_jcr->dcr)) {
+ Dmsg2(90, "Got write_block_to_dev error on device %s. %s\n",
dev_name(out_dev), strerror_dev(out_dev));
- Jmsg(out_jcr, M_FATAL, 0, _("Cannot fixup device error. %s\n"),
+ Jmsg(out_jcr, M_FATAL, 0, _("Cannot fixup device error. %s\n"),
strerror_dev(out_dev));
}
}
- if (!write_block_to_device(out_jcr->dcr, out_block)) {
- Dmsg2(90, "Got write_block_to_dev error on device %s. %s\n",
+ if (!write_block_to_device(out_jcr->dcr)) {
+ Dmsg2(90, "Got write_block_to_dev error on device %s. %s\n",
dev_name(out_dev), strerror_dev(out_dev));
- Jmsg(out_jcr, M_FATAL, 0, _("Cannot fixup device error. %s\n"),
+ Jmsg(out_jcr, M_FATAL, 0, _("Cannot fixup device error. %s\n"),
strerror_dev(out_dev));
}
break;
case EOM_LABEL:
- Pmsg0(000, "EOM label not copied.\n");
+ Pmsg0(000, "EOM label not copied.\n");
return true;
case EOT_LABEL: /* end of all tapes */
- Pmsg0(000, "EOT label not copied.\n");
+ Pmsg0(000, "EOT label not copied.\n");
return true;
default:
break;
while (!write_record_to_block(out_block, rec)) {
Dmsg2(150, "!write_record_to_block data_len=%d rem=%d\n", rec->data_len,
rec->remainder);
- if (!write_block_to_device(out_jcr->dcr, out_block)) {
- Dmsg2(90, "Got write_block_to_dev error on device %s. %s\n",
+ if (!write_block_to_device(out_jcr->dcr)) {
+ Dmsg2(90, "Got write_block_to_dev error on device %s. %s\n",
dev_name(out_dev), strerror_dev(out_dev));
- Jmsg(out_jcr, M_FATAL, 0, _("Cannot fixup device error. %s\n"),
+ Jmsg(out_jcr, M_FATAL, 0, _("Cannot fixup device error. %s\n"),
strerror_dev(out_dev));
break;
}
bool dir_ask_sysop_to_mount_volume(DCR *dcr)
{
- JCR *jcr = dcr->jcr;
DEVICE *dev = dcr->dev;
fprintf(stderr, "Mount Volume \"%s\" on device %s and press return when ready: ",
- jcr->VolumeName, dev_name(dev));
- getchar();
+ dcr->VolumeName, dev_name(dev));
+ getchar();
return true;
}