Switzerland, email:ftf@fsfeurope.org.
*/
/*
- * faketape.h - Emulate the Linux st (scsi tape) driver on file.
+ * vtape.h - Emulate the Linux st (scsi tape) driver on file.
* for regression and bug hunting purpose
*
*/
-#ifndef FAKETAPE_H
-#define FAKETAPE_H
+#ifndef VTAPE_H
+#define VTAPE_H
#include <stdarg.h>
#include <stddef.h>
#include "bacula.h"
-#ifdef USE_FAKETAPE
-
#define FTAPE_MAX_DRIVE 50
/*
* Theses functions will replace open/read/write
*/
-int faketape_open(const char *pathname, int flags);
-int faketape_read(int fd, void *buffer, unsigned int count);
-int faketape_write(int fd, const void *buffer, unsigned int count);
-int faketape_close(int fd);
-int faketape_ioctl(int fd, unsigned long int request, ...);
-void faketape_debug(int level);
-
-class faketape {
+int vtape_open(const char *pathname, int flags, ...);
+int vtape_read(int fd, void *buffer, unsigned int count);
+int vtape_write(int fd, const void *buffer, unsigned int count);
+int vtape_close(int fd);
+int vtape_ioctl(int fd, unsigned long int request, ...);
+void vtape_debug(int level);
+
+typedef enum {
+ VT_READ_EOF, /* Need to read the entire EOF struct */
+ VT_SKIP_EOF /* Have already read the EOF byte */
+} VT_READ_FM_MODE;
+
+class vtape {
private:
int fd; /* Our file descriptor */
- off_t file_block; /* size */
+ off_t file_block; /* size */
off_t max_block;
+ off_t last_FM; /* last file mark (last file) */
+ off_t next_FM; /* next file mark (next file) */
+ off_t cur_FM; /* current file mark */
+
bool atEOF; /* End of file */
bool atEOT; /* End of media */
bool atEOD; /* End of data */
bool atBOT; /* Begin of tape */
bool online; /* volume online */
- bool inplace; /* have to seek before writing ? */
bool needEOF; /* check if last operation need eof */
int32_t last_file; /* last file of the volume */
int32_t current_block; /* current position */
void destroy();
- int find_maxfile();
int offline();
int truncate_file();
- int seek_file();
- void check_eof() { if(needEOF) weof(1);};
+ void check_eof() { if(needEOF) weof();};
void update_pos();
+ bool read_fm(VT_READ_FM_MODE readfirst);
public:
- int fsf(int count);
+ int fsf();
int fsr(int count);
- int weof(int count);
- int bsf(int count);
+ int weof();
+ int bsf();
int bsr(int count);
- faketape();
- ~faketape();
+ vtape();
+ ~vtape();
int get_fd();
void dump();
int tape_pos(struct mtpos *mt_com);
};
-#endif /* USE_FAKETAPE */
-#endif /* !FAKETAPE_H */
+#endif /* !VTAPE_H */