X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=bacula%2Fsrc%2Ffindlib%2Ffind.h;h=8d6be394b266570d9218e12707ce715fdff870d9;hb=a1dc8456c934c038e6d45ff1f04709940bd1a1a9;hp=11038e5df0afe9b77b5436399f825d692b83ff2e;hpb=3e860e416521c6df26049007324395b0d7a89b4a;p=bacula%2Fbacula diff --git a/bacula/src/findlib/find.h b/bacula/src/findlib/find.h old mode 100755 new mode 100644 index 11038e5df0..8d6be394b2 --- a/bacula/src/findlib/find.h +++ b/bacula/src/findlib/find.h @@ -1,33 +1,43 @@ /* - * File types as returned by find_files() - * - * Kern Sibbald MIM - */ -/* - Copyright (C) 2000-2004 Kern Sibbald + Bacula® - The Network Backup Solution + + Copyright (C) 2001-2010 Free Software Foundation Europe e.V. - 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. + The main author of Bacula is Kern Sibbald, with contributions from + many others, a complete list can be found in the file AUTHORS. + This program is Free Software; you can redistribute it and/or + modify it under the terms of version three of the GNU Affero General Public + License as published by the Free Software Foundation and included + in the file LICENSE. - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of + 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. + You should have received a copy of the GNU Affero General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + 02110-1301, USA. + Bacula® is a registered trademark of Kern Sibbald. + The licensor of Bacula is the Free Software Foundation Europe + (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, + Switzerland, email:ftf@fsfeurope.org. +*/ +/* + * File types as returned by find_files() + * + * Kern Sibbald MMI */ #ifndef __FILES_H #define __FILES_H #include "jcr.h" +#include "fileopts.h" #include "bfile.h" +#include "../filed/fd_plugins.h" #ifdef HAVE_DIRENT_H #include @@ -35,6 +45,9 @@ #endif #include +#if !defined(HAVE_WIN32) || defined(HAVE_MINGW) +#include +#endif #if HAVE_UTIME_H #include #else @@ -47,53 +60,24 @@ struct utimbuf { #define MODE_RALL (S_IRUSR|S_IRGRP|S_IROTH) #include "lib/fnmatch.h" +// #include "lib/enh_fnmatch.h" -#ifdef HAVE_REGEX_H +#ifndef HAVE_REGEX_H +#include "lib/bregex.h" +#else #include #endif -#include "save-cwd.h" - #ifndef HAVE_READDIR_R int readdir_r(DIR *dirp, struct dirent *entry, struct dirent **result); #endif - -/* - * Status codes returned by create_file() - */ -enum { - CF_SKIP = 1, /* skip file (not newer or something) */ - CF_ERROR, /* error creating file */ - CF_EXTRACT, /* file created, data to extract */ - CF_CREATED /* file created, no data to extract */ -}; - - -/* Options saved int "options" of the include/exclude lists. - * They are directly jammed ito "flag" of ff packet - */ -#define FO_MD5 (1<<1) /* Do MD5 checksum */ -#define FO_GZIP (1<<2) /* Do Zlib compression */ -#define FO_NO_RECURSION (1<<3) /* no recursion in directories */ -#define FO_MULTIFS (1<<4) /* multiple file systems */ -#define FO_SPARSE (1<<5) /* do sparse file checking */ -#define FO_IF_NEWER (1<<6) /* replace if newer */ -#define FO_NOREPLACE (1<<7) /* never replace */ -#define FO_READFIFO (1<<8) /* read data from fifo */ -#define FO_SHA1 (1<<9) /* Do SHA1 checksum */ -#define FO_PORTABLE (1<<10) /* Use portable data format -- no BackupWrite */ -#define FO_MTIMEONLY (1<<11) /* Use mtime rather than mtime & ctime */ -#define FO_KEEPATIME (1<<12) /* Reset access time */ -#define FO_EXCLUDE (1<<13) /* Exclude file */ -#define FO_ACL (1<<14) /* Backup ACLs */ -#define FO_NO_HARDLINK (1<<15) /* don't handle hard links */ -#define FO_IGNORECASE (1<<16) /* Ignore file name case */ -#define FO_HFSPLUS (1<<17) /* Resource forks and Finder Info */ +/* For options FO_xxx values see src/fileopts.h */ struct s_included_file { struct s_included_file *next; uint32_t options; /* backup options */ + uint32_t algo; /* compression algorithm. 4 letters stored as an interger */ int level; /* compression level */ int len; /* length of fname */ int pattern; /* set if wild card pattern */ @@ -112,7 +96,7 @@ struct s_excluded_file { * of the structure are passed by the Director to the * File daemon and recompiled back into this structure */ -#undef MAX_FOPTS +#undef MAX_FOPTS #define MAX_FOPTS 30 enum { @@ -125,14 +109,23 @@ enum { /* File options structure */ struct findFOPTS { uint32_t flags; /* options in bits */ - int GZIP_level; /* GZIP level */ + uint32_t Compress_algo; /* compression algorithm. 4 letters stored as an interger */ + int Compress_level; /* compression level */ + int strip_path; /* strip path count */ char VerifyOpts[MAX_FOPTS]; /* verify options */ + char AccurateOpts[MAX_FOPTS]; /* accurate mode options */ + char BaseJobOpts[MAX_FOPTS]; /* basejob mode options */ + char *plugin; /* Plugin that handle this section */ alist regex; /* regex string(s) */ + alist regexdir; /* regex string(s) for directories */ + alist regexfile; /* regex string(s) for files */ alist wild; /* wild card strings */ + alist wilddir; /* wild card strings for directories */ + alist wildfile; /* wild card strings for files */ + alist wildbase; /* wild card strings for basenames */ alist base; /* list of base names */ alist fstype; /* file system type limitation */ - char *reader; /* reader program */ - char *writer; /* writer program */ + alist drivetype; /* drive type limitation */ }; @@ -140,10 +133,12 @@ struct findFOPTS { struct findINCEXE { findFOPTS *current_opts; /* points to current options structure */ alist opts_list; /* options list */ - alist name_list; /* filename list -- holds char * */ + dlist name_list; /* filename list -- holds dlistString */ + dlist plugin_list; /* plugin list -- holds dlistString */ + char *ignoredir; /* ignore directories with this file */ }; -/* +/* * FileSet Resource * */ @@ -154,56 +149,76 @@ struct findFILESET { alist exclude_list; }; -#ifdef HAVE_DARWIN_OS struct HFSPLUS_INFO { unsigned long length; /* Mandatory field */ char fndrinfo[32]; /* Finder Info */ off_t rsrclength; /* Size of resource fork */ }; -#endif /* * Definition of the find_files packet passed as the * first argument to the find_files callback subroutine. */ struct FF_PKT { - char *fname; /* filename */ + char *top_fname; /* full filename before descending */ + char *fname; /* full filename */ char *link; /* link if file linked */ + char *object_name; /* Object name */ + char *object; /* restore object */ + char *plugin; /* Current Options{Plugin=} name */ POOLMEM *sys_fname; /* system filename */ + POOLMEM *fname_save; /* save when stripping path */ + POOLMEM *link_save; /* save when stripping path */ + POOLMEM *ignoredir_fname; /* used to ignore directories */ + char *digest; /* set to file digest when the file is a hardlink */ struct stat statp; /* stat packet */ + uint32_t digest_len; /* set to the digest len when the file is a hardlink*/ + int32_t digest_stream; /* set to digest type when the file is hardlink */ int32_t FileIndex; /* FileIndex of this file */ int32_t LinkFI; /* FileIndex of main hard linked file */ + int32_t delta_seq; /* Delta Sequence number */ + int32_t object_index; /* Object index */ + int32_t object_len; /* Object length */ + int32_t object_compression; /* Type of compression for object */ struct f_link *linked; /* Set if this file is hard linked */ int type; /* FT_ type from above */ int ff_errno; /* errno */ BFILE bfd; /* Bacula file descriptor */ time_t save_time; /* start of incremental time */ + bool accurate_found; /* Found in the accurate hash (valid after check_changes()) */ bool dereference; /* follow links (not implemented) */ bool null_output_device; /* using null output device */ bool incremental; /* incremental save */ + bool no_read; /* Do not read this file when using Plugin */ char VerifyOpts[20]; + char AccurateOpts[20]; + char BaseJobOpts[20]; struct s_included_file *included_files_list; struct s_excluded_file *excluded_files_list; struct s_excluded_file *excluded_paths_list; findFILESET *fileset; - int (*callback)(FF_PKT *, void *); /* User's callback */ + int (*file_save)(JCR *, FF_PKT *, bool); /* User's callback */ + int (*plugin_save)(JCR *, FF_PKT *, bool); /* User's callback */ + bool (*check_fct)(JCR *, FF_PKT *); /* optionnal user fct to check file changes */ - /* Values set by accept_file while processing Options */ + /* Values set by accept_file while processing Options */ uint32_t flags; /* backup options */ - int GZIP_level; /* compression level */ - char *reader; /* reader program */ - char *writer; /* writer program */ + uint32_t Compress_algo; /* compression algorithm. 4 letters stored as an interger */ + int Compress_level; /* compression level */ + int strip_path; /* strip path count */ + bool cmd_plugin; /* set if we have a command plugin */ + bool opt_plugin; /* set if we have an option plugin */ alist fstypes; /* allowed file system types */ + alist drivetypes; /* allowed drive types */ /* List of all hard linked files found */ - struct f_link *linklist; /* hard linked files */ + struct f_link **linkhash; /* hard linked files */ - /* Darwin specific things. So as not to clutter every bclose() - * with an #ifdef, we always include rsrc_bfd */ + /* Darwin specific things. + * To avoid clutter, we always include rsrc_bfd and volhas_attrlist */ BFILE rsrc_bfd; /* fd for resource forks */ -#ifdef HAVE_DARWIN_OS + bool volhas_attrlist; /* Volume supports getattrlist() */ struct HFSPLUS_INFO hfsinfo; /* Finder Info and resource fork size */ -#endif };