]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/stored/faketape.h
ebl rename faketape to vtape
[bacula/bacula] / bacula / src / stored / faketape.h
index 5101eb0a8c2d5c85c3ed3e15d4d76a6246796a6d..0bef45fe00371bde84dbf9523781b6345e463ba8 100644 (file)
    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 */
@@ -72,22 +78,21 @@ private:
    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();
@@ -101,5 +106,4 @@ public:
    int tape_pos(struct mtpos *mt_com);
 };
 
-#endif /* USE_FAKETAPE */
-#endif /* !FAKETAPE_H */
+#endif /* !VTAPE_H */