static int argc;
static int quickie_count = 0;
+static uint64_t write_count = 0;
static BSR *bsr = NULL;
static int signals = TRUE;
static bool ok;
/*********************************************************************
*
- * Main Bacula Pool Creation Program
+ * Bacula tape testing program
*
*/
int main(int margc, char *margv[])
}
x32 = 123456789;
bsnprintf(buf, sizeof(buf), "%u", x32);
- i = bsscanf(buf, "%u", &y32);
+ i = bsscanf(buf, "%lu", &y32);
if (i != 1 || x32 != y32) {
Pmsg3(-1, _("32 bit printf/scanf problem. i=%d x32=%u y32=%u\n"), i, x32, y32);
exit(1);
bsnprintf(buf, sizeof(buf), "%" llu, x64);
i = bsscanf(buf, "%llu", &y64);
if (i != 1 || x64 != y64) {
- Pmsg3(-1, _("64 bit printf/scanf problem. i=%d x64=%" llu " y64=%" llu "\n"), i, x64, y64);
+ Pmsg3(-1, _("64 bit printf/scanf problem. i=%d x64=%" llu " y64=%" llu "\n"),
+ i, x64, y64);
exit(1);
}
my_name_is(margc, margv, "btape");
init_msg(NULL, NULL);
+ OSDependentInit();
+
while ((ch = getopt(margc, margv, "b:c:d:psv?")) != -1) {
switch (ch) {
case 'b': /* bootstrap file */
jcr = NULL;
if (dev) {
- term_dev(dev);
+ dev->term();
}
+ free_volume_list();
+
if (debug_level > 10)
print_memory_pool_stats();
if (!dev->is_open()) {
if (!first_open_device(dcr)) {
- Pmsg1(0, _("Device open failed. ERR=%s\n"), strerror_dev(dev));
+ Pmsg1(0, _("Device open failed. ERR=%s\n"), dev->bstrerror());
}
}
dev->rewind(dcr);
- write_new_volume_label_to_dev(dcr, cmd, "Default");
+ write_new_volume_label_to_dev(dcr, cmd, "Default", true /* label dvd now */);
Pmsg1(-1, _("Wrote Volume label for volume \"%s\".\n"), cmd);
}
Pmsg0(0, _("Volume label read correctly.\n"));
break;
case VOL_IO_ERROR:
- Pmsg1(0, _("I/O error on device: ERR=%s"), strerror_dev(dev));
+ Pmsg1(0, _("I/O error on device: ERR=%s"), dev->bstrerror());
break;
case VOL_NAME_ERROR:
Pmsg0(0, _("Volume name error\n"));
break;
case VOL_CREATE_ERROR:
- Pmsg1(0, _("Error creating label. ERR=%s"), strerror_dev(dev));
+ Pmsg1(0, _("Error creating label. ERR=%s"), dev->bstrerror());
break;
case VOL_VERSION_ERROR:
Pmsg0(0, _("Volume version error.\n"));
{
if (!load_dev(dev)) {
- Pmsg1(0, _("Bad status from load. ERR=%s\n"), strerror_dev(dev));
+ Pmsg1(0, _("Bad status from load. ERR=%s\n"), dev->bstrerror());
} else
Pmsg1(0, _("Loaded %s\n"), dev->print_name());
}
static void rewindcmd()
{
if (!dev->rewind(dcr)) {
- Pmsg1(0, _("Bad status from rewind. ERR=%s\n"), strerror_dev(dev));
- clrerror_dev(dev, -1);
+ Pmsg1(0, _("Bad status from rewind. ERR=%s\n"), dev->bstrerror());
+ dev->clrerror(-1);
} else {
Pmsg1(0, _("Rewound %s\n"), dev->print_name());
}
*/
static void clearcmd()
{
- clrerror_dev(dev, -1);
+ dev->clrerror(-1);
}
/*
*/
static void weofcmd()
{
- int stat;
int num = 1;
if (argc > 1) {
num = atoi(argk[1]);
num = 1;
}
- if ((stat = weof_dev(dev, num)) < 0) {
- Pmsg2(0, _("Bad status from weof %d. ERR=%s\n"), stat, strerror_dev(dev));
+ if (!dev->weof(num)) {
+ Pmsg1(0, _("Bad status from weof. ERR=%s\n"), dev->bstrerror());
return;
} else {
if (num==1) {
static void eomcmd()
{
if (!dev->eod()) {
- Pmsg1(0, "%s", strerror_dev(dev));
+ Pmsg1(0, "%s", dev->bstrerror());
return;
} else {
Pmsg0(0, _("Moved to end of medium.\n"));
}
if (!dev->bsf(num)) {
- Pmsg1(0, _("Bad status from bsf. ERR=%s\n"), strerror_dev(dev));
+ Pmsg1(0, _("Bad status from bsf. ERR=%s\n"), dev->bstrerror());
} else {
Pmsg2(0, _("Backspaced %d file%s.\n"), num, num==1?"":"s");
}
if (num <= 0) {
num = 1;
}
- if (!bsr_dev(dev, num)) {
- Pmsg1(0, _("Bad status from bsr. ERR=%s\n"), strerror_dev(dev));
+ if (!dev->bsr(num)) {
+ Pmsg1(0, _("Bad status from bsr. ERR=%s\n"), dev->bstrerror());
} else {
Pmsg2(0, _("Backspaced %d record%s.\n"), num, num==1?"":"s");
}
weofcmd();
}
if (!dev->bsf(1)) {
- Pmsg1(0, _("Backspace file failed! ERR=%s\n"), strerror_dev(dev));
+ Pmsg1(0, _("Backspace file failed! ERR=%s\n"), dev->bstrerror());
goto bail_out;
}
if (dev_cap(dev, CAP_TWOEOF)) {
if (!dev->bsf(1)) {
- Pmsg1(0, _("Backspace file failed! ERR=%s\n"), strerror_dev(dev));
+ Pmsg1(0, _("Backspace file failed! ERR=%s\n"), dev->bstrerror());
goto bail_out;
}
}
Pmsg0(0, _("Backspaced over EOF OK.\n"));
- if (!bsr_dev(dev, 1)) {
- Pmsg1(0, _("Backspace record failed! ERR=%s\n"), strerror_dev(dev));
+ if (!dev->bsr(1)) {
+ Pmsg1(0, _("Backspace record failed! ERR=%s\n"), dev->bstrerror());
goto bail_out;
}
Pmsg0(0, _("Backspace record OK.\n"));
block = dcr->block;
rec = new_record();
if (!dev->rewind(dcr)) {
- Pmsg1(0, _("Bad status from rewind. ERR=%s\n"), strerror_dev(dev));
+ Pmsg1(0, _("Bad status from rewind. ERR=%s\n"), dev->bstrerror());
goto bail_out;
}
rec->data = check_pool_memory_size(rec->data, block->buf_len);
weofcmd();
}
if (!dev->rewind(dcr)) {
- Pmsg1(0, _("Bad status from rewind. ERR=%s\n"), strerror_dev(dev));
+ Pmsg1(0, _("Bad status from rewind. ERR=%s\n"), dev->bstrerror());
goto bail_out;
} else {
Pmsg0(0, _("Rewind OK.\n"));
empty_block(block);
rec = new_record();
if (!dev->rewind(dcr)) {
- Pmsg1(0, _("Bad status from rewind. ERR=%s\n"), strerror_dev(dev));
+ Pmsg1(0, _("Bad status from rewind. ERR=%s\n"), dev->bstrerror());
goto bail_out;
}
rec->data = check_pool_memory_size(rec->data, block->buf_len);
weofcmd();
}
if (!dev->rewind(dcr)) {
- Pmsg1(0, _("Bad status from rewind. ERR=%s\n"), strerror_dev(dev));
+ Pmsg1(0, _("Bad status from rewind. ERR=%s\n"), dev->bstrerror());
goto bail_out;
} else {
Pmsg0(0, _("Rewind OK.\n"));
continue;
}
Pmsg2(-1, _("Reposition to file:block %d:%d\n"), file, blk);
- if (!reposition_dev(dev, file, blk)) {
+ if (!dev->reposition(file, blk)) {
Pmsg0(0, _("Reposition error.\n"));
goto bail_out;
}
* a failure.
*/
bmicrosleep(sleep_time, 0);
- if (!dev->rewind(dcr) || weof_dev(dev,1) < 0) {
- Pmsg1(0, _("Bad status from rewind. ERR=%s\n"), strerror_dev(dev));
- clrerror_dev(dev, -1);
+ if (!dev->rewind(dcr) || !dev->weof(1)) {
+ Pmsg1(0, _("Bad status from rewind. ERR=%s\n"), dev->bstrerror());
+ dev->clrerror(-1);
Pmsg0(-1, _("\nThe test failed, probably because you need to put\n"
"a longer sleep time in the mtx-script in the load) case.\n"
"Adding a 30 second sleep and trying again ...\n"));
Pmsg1(0, _("Rewound %s\n"), dev->print_name());
}
- if ((status = weof_dev(dev, 1)) < 0) {
- Pmsg2(0, _("Bad status from weof %d. ERR=%s\n"), status, strerror_dev(dev));
+ if (!dev->weof(1)) {
+ Pmsg1(0, _("Bad status from weof. ERR=%s\n"), dev->bstrerror());
goto bail_out;
} else {
Pmsg1(0, _("Wrote EOF to %s\n"), dev->print_name());
rewindcmd();
Pmsg0(0, _("Now forward spacing 1 file.\n"));
if (!dev->fsf(1)) {
- Pmsg1(0, _("Bad status from fsr. ERR=%s\n"), strerror_dev(dev));
+ Pmsg1(0, _("Bad status from fsr. ERR=%s\n"), dev->bstrerror());
goto bail_out;
}
Pmsg2(-1, _("We should be in file 1. I am at file %d. %s\n"),
Pmsg0(0, _("Now forward spacing 2 files.\n"));
if (!dev->fsf(2)) {
- Pmsg1(0, _("Bad status from fsr. ERR=%s\n"), strerror_dev(dev));
+ Pmsg1(0, _("Bad status from fsr. ERR=%s\n"), dev->bstrerror());
goto bail_out;
}
Pmsg2(-1, _("We should be in file 3. I am at file %d. %s\n"),
rewindcmd();
Pmsg0(0, _("Now forward spacing 4 files.\n"));
if (!dev->fsf(4)) {
- Pmsg1(0, _("Bad status from fsr. ERR=%s\n"), strerror_dev(dev));
+ Pmsg1(0, _("Bad status from fsr. ERR=%s\n"), dev->bstrerror());
goto bail_out;
}
Pmsg2(-1, _("We should be in file 4. I am at file %d. %s\n"),
Pmsg0(-1, "\n");
Pmsg0(0, _("Now forward spacing 1 more file.\n"));
if (!dev->fsf(1)) {
- Pmsg1(0, _("Bad status from fsr. ERR=%s\n"), strerror_dev(dev));
+ Pmsg1(0, _("Bad status from fsr. ERR=%s\n"), dev->bstrerror());
}
Pmsg2(-1, _("We should be in file 5. I am at file %d. %s\n"),
dev->file, dev->file == 5 ? _("This is correct!") : _("This is NOT correct!!!!"));
num = 1;
}
if (!dev->fsf(num)) {
- Pmsg1(0, _("Bad status from fsf. ERR=%s\n"), strerror_dev(dev));
+ Pmsg1(0, _("Bad status from fsf. ERR=%s\n"), dev->bstrerror());
return;
}
if (num == 1) {
num = 1;
}
if (!dev->fsr(num)) {
- Pmsg1(0, _("Bad status from fsr. ERR=%s\n"), strerror_dev(dev));
+ Pmsg1(0, _("Bad status from fsr. ERR=%s\n"), dev->bstrerror());
return;
}
if (num == 1) {
for (;;) {
if ((stat = read(dev->fd, buf, sizeof(buf))) < 0) {
berrno be;
- clrerror_dev(dev, -1);
+ dev->clrerror(-1);
Mmsg2(dev->errmsg, _("read error on %s. ERR=%s.\n"),
dev->dev_name, be.strerror());
- Pmsg2(0, _("Bad status from read %d. ERR=%s\n"), stat, strerror_dev(dev));
+ Pmsg2(0, _("Bad status from read %d. ERR=%s\n"), stat, dev->bstrerror());
if (blocks > 0) {
if (blocks==1) {
printf(_("1 block of %d bytes in file %d\n"), block_size, dev->file);
tot_files = dev->file;
for (;;) {
if (!read_block_from_device(dcr, NO_BLOCK_NUMBER_CHECK)) {
- Dmsg1(100, "!read_block(): ERR=%s\n", strerror_dev(dev));
+ Dmsg1(100, "!read_block(): ERR=%s\n", dev->bstrerror());
if (dev->state & ST_EOT) {
if (blocks > 0) {
if (blocks==1) {
printf(_("Short block read.\n"));
continue;
}
- printf(_("Error reading block. ERR=%s\n"), strerror_dev(dev));
+ printf(_("Error reading block. ERR=%s\n"), dev->bstrerror());
goto bail_out;
}
if (block->block_len != block_size) {
{
int debug = debug_level;
debug_level = 30;
- Pmsg2(0, _("Device status: %u. ERR=%s\n"), status_dev(dev), strerror_dev(dev));
+ Pmsg2(0, _("Device status: %u. ERR=%s\n"), status_dev(dev), dev->bstrerror());
#ifdef xxxx
dump_volume_label(dev);
#endif
if (!dev->rewind(dcr)) {
Pmsg0(000, _("Rewind failed.\n"));
}
- if (!dev->weof()) {
+ if (!dev->weof(1)) {
Pmsg0(000, _("Write EOF failed.\n"));
}
labelcmd();
if (!write_session_label(dcr, SOS_LABEL)) {
set_jcr_job_status(jcr, JS_ErrorTerminated);
Jmsg1(jcr, M_FATAL, 0, _("Write session label failed. ERR=%s\n"),
- strerror_dev(dev));
+ dev->bstrerror());
ok = false;
}
Pmsg0(-1, _("Wrote Start of Session label.\n"));
*/
jcr->dcr->VolFirstIndex = 0;
time(&jcr->run_time); /* start counting time for rates */
- localtime_r(&jcr->run_time, &tm);
- strftime(buf1, sizeof(buf1), "%T", &tm);
+ (void)localtime_r(&jcr->run_time, &tm);
+ strftime(buf1, sizeof(buf1), "%H:%M:%S", &tm);
if (simple) {
Pmsg1(-1, _("%s Begin writing Bacula records to tape ...\n"), buf1);
} else {
*/
if ((block->BlockNumber % 32000) == 0) {
now = time(NULL);
- localtime_r(&now, &tm);
- strftime(buf1, sizeof(buf1), "%T", &tm);
+ (void)localtime_r(&now, &tm);
+ strftime(buf1, sizeof(buf1), "%H:%M:%S", &tm);
Pmsg1(-1, _("%s Flush block, write EOF\n"), buf1);
flush_block(block, 0);
- weof_dev(dev, 1);
+ dev->weof(1);
}
/* Get out after writing 10 blocks to the second tape */
/* Get out after writing 10 blocks to the second tape */
if (BlockNumber > 10 && stop != 0) { /* get out */
- Pmsg0(-1, "Done writing ...\n");
+ char ed1[50];
+ Pmsg1(-1, "Done writing %s records ...\n",
+ edit_uint64_with_commas(write_count, ed1));
break;
}
}
set_jcr_job_status(jcr, JS_ErrorTerminated);
}
if (!write_session_label(dcr, EOS_LABEL)) {
- Pmsg1(000, _("Error writting end session label. ERR=%s\n"), strerror_dev(dev));
+ Pmsg1(000, _("Error writting end session label. ERR=%s\n"), dev->bstrerror());
ok = false;
}
/* Write out final block of this session */
}
now = time(NULL);
- localtime_r(&now, &tm);
- strftime(buf1, sizeof(buf1), "%T", &tm);
+ (void)localtime_r(&now, &tm);
+ strftime(buf1, sizeof(buf1), "%H:%M:%S", &tm);
if (simple) {
Pmsg3(-1, _("\n\n%s Done filling tape at %d:%d. Now beginning re-read of tape ...\n"),
buf1, jcr->dcr->dev->file, jcr->dcr->dev->block_num);
file_index = 0;
if (last_block) {
free_block(last_block);
+ last_block = NULL;
}
last_block_num = last_block_num1;
last_file = last_file1;
dev->close();
get_cmd(_("Mount first tape. Press enter when ready: "));
}
- free_restore_volume_list(jcr);
- jcr->dcr = new_dcr(jcr, dev);
- set_volume_name("TestVolume1", 1);
- jcr->bsr = NULL;
- create_restore_volume_list(jcr);
- dev->close();
- dev->num_writers = 0;
- if (!acquire_device_for_read(dcr)) {
- Pmsg1(-1, "%s", dev->errmsg);
- goto bail_out;
- }
+ }
+
+ free_restore_volume_list(jcr);
+ jcr->dcr = new_dcr(jcr, dev);
+ set_volume_name("TestVolume1", 1);
+ jcr->bsr = NULL;
+ create_restore_volume_list(jcr);
+ dev->close();
+ dev->num_writers = 0;
+ if (!acquire_device_for_read(dcr)) {
+ Pmsg1(-1, "%s", dev->errmsg);
+ goto bail_out;
}
/*
* We now have the first tape mounted.
read_records(dcr, quickie_cb, my_mount_next_read_volume);
Pmsg4(-1, _("Reposition from %u:%u to %u:%u\n"), dev->file, dev->block_num,
last_file, last_block_num);
- if (!reposition_dev(dev, last_file, last_block_num)) {
- Pmsg1(-1, _("Reposition error. ERR=%s\n"), strerror_dev(dev));
+ if (!dev->reposition(last_file, last_block_num)) {
+ Pmsg1(-1, _("Reposition error. ERR=%s\n"), dev->bstrerror());
goto bail_out;
}
Pmsg1(-1, _("Reading block %u.\n"), last_block_num);
if (!read_block_from_device(dcr, NO_BLOCK_NUMBER_CHECK)) {
- Pmsg1(-1, _("Error reading block: ERR=%s\n"), strerror_dev(dev));
+ Pmsg1(-1, _("Error reading block: ERR=%s\n"), dev->bstrerror());
goto bail_out;
}
if (compare_blocks(last_block, block)) {
* on the previous tape.
*/
Pmsg2(-1, _("Reposition from %u:%u to 0:1\n"), dev->file, dev->block_num);
- if (!reposition_dev(dev, 0, 1)) {
- Pmsg1(-1, _("Reposition error. ERR=%s\n"), strerror_dev(dev));
+ if (!dev->reposition(0, 1)) {
+ Pmsg1(-1, _("Reposition error. ERR=%s\n"), dev->bstrerror());
goto bail_out;
}
Pmsg1(-1, _("Reading block %d.\n"), dev->block_num);
if (!read_block_from_device(dcr, NO_BLOCK_NUMBER_CHECK)) {
- Pmsg1(-1, _("Error reading block: ERR=%s\n"), strerror_dev(dev));
+ Pmsg1(-1, _("Error reading block: ERR=%s\n"), dev->bstrerror());
goto bail_out;
}
if (compare_blocks(first_block, block)) {
/* Now find and compare the last block */
Pmsg4(-1, _("Reposition from %u:%u to %u:%u\n"), dev->file, dev->block_num,
last_file, last_block_num);
- if (!reposition_dev(dev, last_file, last_block_num)) {
- Pmsg1(-1, _("Reposition error. ERR=%s\n"), strerror_dev(dev));
+ if (!dev->reposition(last_file, last_block_num)) {
+ Pmsg1(-1, _("Reposition error. ERR=%s\n"), dev->bstrerror());
goto bail_out;
}
Pmsg1(-1, _("Reading block %d.\n"), dev->block_num);
if (!read_block_from_device(dcr, NO_BLOCK_NUMBER_CHECK)) {
- Pmsg1(-1, _("Error reading block: ERR=%s\n"), strerror_dev(dev));
+ Pmsg1(-1, _("Error reading block: ERR=%s\n"), dev->bstrerror());
goto bail_out;
}
if (compare_blocks(last_block, block)) {
} else {
/* Full test in progress */
if (!fixup_device_block_write_error(jcr->dcr)) {
- Pmsg1(000, _("Cannot fixup device error. %s\n"), strerror_dev(dev));
+ Pmsg1(000, _("Cannot fixup device error. %s\n"), dev->bstrerror());
ok = false;
unlock_device(dev);
return 0;
Pmsg1(0, _("Begin writing raw blocks of %u bytes.\n"), block->buf_len);
for ( ;; ) {
*p = block_num;
- stat = write(dev->fd, block->buf, block->buf_len);
+ if (dev->is_tape()) {
+ stat = tape_write(dev->fd, block->buf, block->buf_len);
+ } else {
+ stat = write(dev->fd, block->buf, block->buf_len);
+ }
if (stat == (int)block->buf_len) {
if ((block_num++ % 100) == 0) {
printf("+");
struct cmdstruct { const char *key; void (*func)(); const char *help; };
static struct cmdstruct commands[] = {
- {N_("autochanger"),autochangercmd, _("test autochanger")},
- {N_("bsf"), bsfcmd, _("backspace file")},
- {N_("bsr"), bsrcmd, _("backspace record")},
- {N_("bfill"), bfill_cmd, _("fill tape using Bacula writes")},
- {N_("cap"), capcmd, _("list device capabilities")},
- {N_("clear"), clearcmd, _("clear tape errors")},
- {N_("eod"), eodcmd, _("go to end of Bacula data for append")},
- {N_("eom"), eomcmd, _("go to the physical end of medium")},
- {N_("fill"), fillcmd, _("fill tape, write onto second volume")},
- {N_("unfill"), unfillcmd, _("read filled tape")},
- {N_("fsf"), fsfcmd, _("forward space a file")},
- {N_("fsr"), fsrcmd, _("forward space a record")},
- {N_("help"), helpcmd, _("print this command")},
- {N_("label"), labelcmd, _("write a Bacula label to the tape")},
- {N_("load"), loadcmd, _("load a tape")},
- {N_("quit"), quitcmd, _("quit btape")},
- {N_("rawfill"), rawfill_cmd, _("use write() to fill tape")},
- {N_("readlabel"), readlabelcmd, _("read and print the Bacula tape label")},
- {N_("rectest"), rectestcmd, _("test record handling functions")},
- {N_("rewind"), rewindcmd, _("rewind the tape")},
- {N_("scan"), scancmd, _("read() tape block by block to EOT and report")},
- {N_("scanblocks"),scan_blocks, _("Bacula read block by block to EOT and report")},
- {N_("status"), statcmd, _("print tape status")},
- {N_("test"), testcmd, _("General test Bacula tape functions")},
- {N_("weof"), weofcmd, _("write an EOF on the tape")},
- {N_("wr"), wrcmd, _("write a single Bacula block")},
- {N_("rr"), rrcmd, _("read a single record")},
- {N_("qfill"), qfillcmd, _("quick fill command")}
+ {NT_("autochanger"),autochangercmd, _("test autochanger")},
+ {NT_("bsf"), bsfcmd, _("backspace file")},
+ {NT_("bsr"), bsrcmd, _("backspace record")},
+ {NT_("bfill"), bfill_cmd, _("fill tape using Bacula writes")},
+ {NT_("cap"), capcmd, _("list device capabilities")},
+ {NT_("clear"), clearcmd, _("clear tape errors")},
+ {NT_("eod"), eodcmd, _("go to end of Bacula data for append")},
+ {NT_("eom"), eomcmd, _("go to the physical end of medium")},
+ {NT_("fill"), fillcmd, _("fill tape, write onto second volume")},
+ {NT_("unfill"), unfillcmd, _("read filled tape")},
+ {NT_("fsf"), fsfcmd, _("forward space a file")},
+ {NT_("fsr"), fsrcmd, _("forward space a record")},
+ {NT_("help"), helpcmd, _("print this command")},
+ {NT_("label"), labelcmd, _("write a Bacula label to the tape")},
+ {NT_("load"), loadcmd, _("load a tape")},
+ {NT_("quit"), quitcmd, _("quit btape")},
+ {NT_("rawfill"), rawfill_cmd, _("use write() to fill tape")},
+ {NT_("readlabel"), readlabelcmd, _("read and print the Bacula tape label")},
+ {NT_("rectest"), rectestcmd, _("test record handling functions")},
+ {NT_("rewind"), rewindcmd, _("rewind the tape")},
+ {NT_("scan"), scancmd, _("read() tape block by block to EOT and report")},
+ {NT_("scanblocks"),scan_blocks, _("Bacula read block by block to EOT and report")},
+ {NT_("status"), statcmd, _("print tape status")},
+ {NT_("test"), testcmd, _("General test Bacula tape functions")},
+ {NT_("weof"), weofcmd, _("write an EOF on the tape")},
+ {NT_("wr"), wrcmd, _("write a single Bacula block")},
+ {NT_("rr"), rrcmd, _("read a single record")},
+ {NT_("qfill"), qfillcmd, _("quick fill command")}
};
#define comsize (sizeof(commands)/sizeof(struct cmdstruct))
unsigned int i;
bool found;
- while (get_cmd("*")) {
+ while (!quit && get_cmd("*")) {
sm_check(__FILE__, __LINE__, false);
found = false;
parse_args(cmd, &args, &argc, argk, argv, MAX_CMD_ARGS);
found = true;
break;
}
- if (!found)
- Pmsg1(0, _("%s is an illegal command\n"), cmd);
- if (quit)
- break;
+ if (!found) {
+ Pmsg1(0, _("\"%s\" is an illegal command\n"), cmd);
+ }
}
}
static void usage()
{
fprintf(stderr, _(
-"Copyright (C) 2000-2005 Kern Sibbald.\n"
+"Copyright (C) 2000-%s Kern Sibbald.\n"
"\nVersion: %s (%s)\n\n"
"Usage: btape <options> <device_name>\n"
" -b <file> specify bootstrap file\n"
" -s turn off signals\n"
" -v be verbose\n"
" -? print this message.\n"
-"\n"), VERSION, BDATE);
+"\n"), BYEAR, VERSION, BDATE);
}
DEV_BLOCK *block = dcr->block;
Dmsg0(20, "Enter my_mount_next_read_volume\n");
- Pmsg1(000, _("End of Volume \"%s\"\n"), dcr->VolumeName);
+ Pmsg2(000, _("End of Volume \"%s\" %d records.\n"), dcr->VolumeName,
+ quickie_count);
if (LastBlock != block->BlockNumber) {
VolBytes += block->block_len;
bstrncpy(dcr->VolumeName, VolName, sizeof(dcr->VolumeName));
dcr->VolCatInfo.Slot = volnum;
}
-
-VOLRES *new_volume(DCR *dcr, const char *VolumeName) { return NULL; }
-bool free_volume(DEVICE *dev) { return true; }
-void free_unused_volume(DCR *dcr) { }