git-svn-id: https://bacula.svn.sourceforge.net/svnroot/bacula/trunk@7097
91ce42f0-d328-0410-95d8-
f526ca767f89
===================================================================
--- src/stored/faketape.c (révision 7092)
+++ src/stored/faketape.c (copie de travail)
===================================================================
--- src/stored/faketape.c (révision 7092)
+++ src/stored/faketape.c (copie de travail)
+@@ -63,7 +63,7 @@
+ #ifdef USE_FAKETAPE
+ #include "faketape.h"
+
+-static int dbglevel = 10;
++static int dbglevel = 0;
+ #define FILE_OFFSET 30
+ faketape *ftape_list[FTAPE_MAX_DRIVE];
+
@@ -170,6 +170,7 @@
int faketape::tape_op(struct mtop *mt_com)
{
@@ -170,6 +170,7 @@
int faketape::tape_op(struct mtop *mt_com)
{
break;
case MTOFFL: /* put tape offline */
break;
case MTOFFL: /* put tape offline */
break;
case MTEOM:/* Go to the end of the recorded media (for appending files). */
+ while (next_FM) {
+ lseek(fd, next_FM, SEEK_SET);
break;
case MTEOM:/* Go to the end of the recorded media (for appending files). */
+ while (next_FM) {
+ lseek(fd, next_FM, SEEK_SET);
++ if (read_next_fm(true)) {
++ current_file++;
++ }
+ }
+ off_t l;
+ while (::read(fd, &l, sizeof(l)) > 0) {
+ }
+ off_t l;
+ while (::read(fd, &l, sizeof(l)) > 0) {
break;
case MTERASE: /* not used by bacula */
break;
case MTERASE: /* not used by bacula */
current_file = 0;
current_block = -1;
current_file = 0;
current_block = -1;
atEOT = false;
atEOD = false;
online = false;
atEOT = false;
atEOD = false;
online = false;
file_block = 0;
last_file = 0;
file_block = 0;
last_file = 0;
if (!atEOD) { /* if not at the end of the data */
truncate_file();
}
if (!atEOD) { /* if not at the end of the data */
truncate_file();
}
needEOF = true; /* next operation need EOF mark */
needEOF = true; /* next operation need EOF mark */
uint32_t size = count;
::write(fd, &size, sizeof(uint32_t));
nb = ::write(fd, buffer, count);
uint32_t size = count;
::write(fd, &size, sizeof(uint32_t));
nb = ::write(fd, buffer, count);
{
ASSERT(online);
ASSERT(current_file >= 0);
{
ASSERT(online);
ASSERT(current_file >= 0);
/*
* 1 0 -> fsf -> 2 0 -> fsf -> 2 -1
*/
/*
* 1 0 -> fsf -> 2 0 -> fsf -> 2 -1
*/
Dmsg0(dbglevel, "Try to FSF after EOT\n");
errno = EIO;
current_file = last_file ;
Dmsg0(dbglevel, "Try to FSF after EOT\n");
errno = EIO;
current_file = last_file ;
int faketape::fsr(int count)
{
ASSERT(online);
int faketape::fsr(int count)
{
ASSERT(online);
uint32_t s;
Dmsg3(dbglevel, "fsr %i:%i count=%i\n", current_file,current_block, count);
uint32_t s;
Dmsg3(dbglevel, "fsr %i:%i count=%i\n", current_file,current_block, count);
check_eof();
if (atEOT) {
check_eof();
if (atEOT) {
current_file, current_block, nb,s);
errno = EIO;
ret = -1;
current_file, current_block, nb,s);
errno = EIO;
ret = -1;
int faketape::bsr(int count)
{
Dmsg2(dbglevel, "bsr current_block=%i count=%i\n",
int faketape::bsr(int count)
{
Dmsg2(dbglevel, "bsr current_block=%i count=%i\n",
ASSERT(count == 1);
ASSERT(fd >= 0);
ASSERT(count == 1);
ASSERT(fd >= 0);
check_eof();
if (!count) {
check_eof();
if (!count) {
int faketape::close()
{
check_eof();
int faketape::close()
{
check_eof();
int faketape::read(void *buffer, unsigned int count)
{
ASSERT(online);
int faketape::read(void *buffer, unsigned int count)
{
ASSERT(online);
Dmsg2(dbglevel, "read %i:%i\n", current_file, current_block);
if (atEOT || atEOD) {
Dmsg2(dbglevel, "read %i:%i\n", current_file, current_block);
if (atEOT || atEOD) {
errno = EIO;
return -1;
}
errno = EIO;
return -1;
}
/* reading size of data */
nb = ::read(fd, &s, sizeof(uint32_t));
/* reading size of data */
nb = ::read(fd, &s, sizeof(uint32_t));
if (!s) { /* EOF */
atEOF = true;
if (!s) { /* EOF */
atEOF = true;
nb = ::read(fd, buffer, s);
if (s != nb) { /* read error */
errno=EIO;
nb = ::read(fd, buffer, s);
if (s != nb) { /* read error */
errno=EIO;
current_block = -1;
Dmsg0(dbglevel, "EOT during reading\n");
return -1;
current_block = -1;
Dmsg0(dbglevel, "EOT during reading\n");
return -1;
void faketape::update_pos()
{
ASSERT(online);
void faketape::update_pos()
{
ASSERT(online);
Dmsg1(dbglevel+1, "update_pos=%i\n", file_block);
if (file_block > max_block) {
Dmsg1(dbglevel+1, "update_pos=%i\n", file_block);
if (file_block > max_block) {