]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/findlib/bfile.h
Restore win32 dir from Branch-5.2 and update it
[bacula/bacula] / bacula / src / findlib / bfile.h
index a38e53c1c1d2463c1ece075b1b4130ae2811d6cc..78e3b58a3b175f7620d86f98c591d23ad70e3da6 100644 (file)
@@ -1,3 +1,21 @@
+/*
+   Bacula(R) - The Network Backup Solution
+
+   Copyright (C) 2000-2018 Kern Sibbald
+
+   The original author of Bacula is Kern Sibbald, with contributions
+   from many others, a complete list can be found in the file AUTHORS.
+
+   You may use this file and others of this release according to the
+   license defined in the LICENSE file, which includes the Affero General
+   Public License, v3.0 ("AGPLv3") and some additional permissions and
+   terms pursuant to its AGPLv3 Section 7.
+
+   This notice must be preserved when any source code is 
+   conveyed and/or propagated.
+
+   Bacula(R) is a registered trademark of Kern Sibbald.
+*/
 /*
  *  Bacula low level File I/O routines.  This routine simulates
  *    open(), read(), write(), and close(), but using native routines.
  *
  *     Kern Sibbald May MMIII
  */
-/*
-   Copyright (C) 2000-2005 Kern Sibbald
-
-   This program is free software; you can redistribute it and/or
-   modify it under the terms of the GNU General Public License as
-   published by the Free Software Foundation; either version 2 of
-   the License, or (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-   General Public License for more details.
-
-   You should have received a copy of the GNU General Public
-   License along with this program; if not, write to the Free
-   Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
-   MA 02111-1307, USA.
-
- */
 
 #ifndef __BFILE_H
 #define __BFILE_H
 
-#ifdef HAVE_PYTHON
-#undef _POSIX_C_SOURCE
-#include <Python.h>
-struct Python_IO {
-   PyObject *fo;
-   PyObject *fr;
-   PyObject *fc;
-};
-#else
-struct Python_IO {
-};
-#endif
+#include "win32filter.h"
+
+typedef struct _PROCESS_WIN32_BACKUPAPIBLOCK_CONTEXT {
+        int64_t          liNextHeader;
+        bool             bIsInData;
+        BWIN32_STREAM_ID header_stream;
+} PROCESS_WIN32_BACKUPAPIBLOCK_CONTEXT;
 
 /*  =======================================================
  *
@@ -47,10 +41,7 @@ struct Python_IO {
  *
  *  =======================================================
  */
-#if defined(HAVE_CYGWIN) || defined(HAVE_WIN32)
-
-#include <windows.h>
-#include "../lib/winapi.h"
+#ifdef HAVE_WIN32
 
 enum {
    BF_CLOSED,
@@ -61,23 +52,37 @@ enum {
 /* In bfile.c */
 
 /* Basic Win32 low level I/O file packet */
-struct BFILE {
-   int use_backup_api;                /* set if using BackupRead/Write */
+class BFILE {
+public:
+   bool use_backup_api;               /* set if using BackupRead/Write */
    int mode;                          /* set if file is open */
    HANDLE fh;                         /* Win32 file handle */
    int fid;                           /* fd if doing Unix style */
    LPVOID lpContext;                  /* BackupRead/Write context */
+   PVOID pvContext;                   /* Windows encryption (EFS) context */
    POOLMEM *errmsg;                   /* error message buffer */
    DWORD rw_bytes;                    /* Bytes read or written */
    DWORD lerror;                      /* Last error code */
+   DWORD fattrs;                      /* Windows file attributes */
    int berrno;                        /* errno */
-   char *prog;                        /* reader/writer program if any */
+   int block;                         /* Count of read/writes */
+   uint64_t total_bytes;              /* bytes written */
+   boffset_t offset;                  /* Delta offset */
    JCR *jcr;                          /* jcr for editing job codes */
-   Python_IO pio;                     /* Python I/O routines */
+   Win32Filter win32filter;           /* context for decomposition of win32 backup streams */
+   int use_backup_decomp;             /* set if using BackupRead Stream Decomposition */
+   bool reparse_point;                /* set if reparse point */
+   bool cmd_plugin;                   /* set if we have a command plugin */
+   bool const is_encrypted() const;
 };
 
+/* Windows encrypted file system */
+inline const bool BFILE::is_encrypted() const
+  { return (fattrs & FILE_ATTRIBUTE_ENCRYPTED) != 0; };
+
 HANDLE bget_handle(BFILE *bfd);
 
+
 #else   /* Linux/Unix systems */
 
 /*  =======================================================
@@ -90,32 +95,43 @@ HANDLE bget_handle(BFILE *bfd);
 /* Basic Unix low level I/O file packet */
 struct BFILE {
    int fid;                           /* file id on Unix */
-   int berrno;
-   char *prog;                        /* reader/writer program if any */
+   int berrno;                        /* errno */
+   int32_t lerror;                    /* not used - simplies Win32 builds */
+   int block;                         /* Count of read/writes */
+   uint64_t m_flags;                  /* open flags */
+   uint64_t total_bytes;              /* bytes written */
+   boffset_t offset;                  /* Delta offset */
    JCR *jcr;                          /* jcr for editing job codes */
-   Python_IO pio;                     /* Python I/O routines */
+   Win32Filter win32filter;           /* context for decomposition of win32 backup streams */
+   int use_backup_decomp;             /* set if using BackupRead Stream Decomposition */
+   bool reparse_point;                /* not used in Unix */
+   bool cmd_plugin;                   /* set if we have a command plugin */
 };
 
 #endif
 
 void    binit(BFILE *bfd);
 bool    is_bopen(BFILE *bfd);
+#ifdef HAVE_WIN32
+void    set_fattrs(BFILE *bfd, struct stat *statp);
+#else
+#define set_fattrs(bfd, fattrs)
+#endif
 bool    set_win32_backup(BFILE *bfd);
 bool    set_portable_backup(BFILE *bfd);
-bool    set_prog(BFILE *bfd, char *prog, JCR *jcr);
+bool    set_cmd_plugin(BFILE *bfd, JCR *jcr);
 bool    have_win32_api();
 bool    is_portable_backup(BFILE *bfd);
-bool    is_stream_supported(int stream);
+bool    is_restore_stream_supported(int stream);
 bool    is_win32_stream(int stream);
-char   *xberror(BFILE *bfd);          /* DO NOT USE  -- use berrno class */
-int     bopen(BFILE *bfd, const char *fname, int flags, mode_t mode);
-#ifdef HAVE_DARWIN_OS
-int     bopen_rsrc(BFILE *bfd, const char *fname, int flags, mode_t mode);
-#endif
+int     bopen(BFILE *bfd, const char *fname, uint64_t flags, mode_t mode);
+int     bopen_rsrc(BFILE *bfd, const char *fname, uint64_t flags, mode_t mode);
 int     bclose(BFILE *bfd);
 ssize_t bread(BFILE *bfd, void *buf, size_t count);
 ssize_t bwrite(BFILE *bfd, void *buf, size_t count);
-off_t   blseek(BFILE *bfd, off_t offset, int whence);
+boffset_t blseek(BFILE *bfd, boffset_t offset, int whence);
 const char   *stream_to_ascii(int stream);
 
+bool processWin32BackupAPIBlock (BFILE *bfd, void *pBuffer, ssize_t dwSize);
+
 #endif /* __BFILE_H */