Disk ARchive  2.7.15
Full featured and portable backup and archiving tool
filesystem_hard_link_write.hpp
Go to the documentation of this file.
1 /*********************************************************************/
2 // dar - disk archive - a backup/restoration program
3 // Copyright (C) 2002-2024 Denis Corbin
4 //
5 // This program is free software; you can redistribute it and/or
6 // modify it under the terms of the GNU General Public License
7 // as published by the Free Software Foundation; either version 2
8 // of the License, or (at your option) any later version.
9 //
10 // This program is distributed in the hope that it will be useful,
11 // but WITHOUT ANY WARRANTY; without even the implied warranty of
12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 // GNU General Public License for more details.
14 //
15 // You should have received a copy of the GNU General Public License
16 // along with this program; if not, write to the Free Software
17 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18 //
19 // to contact the author, see the AUTHOR file
20 /*********************************************************************/
21 
25 
26 #ifndef FILESYSTEM_HARD_LINK_WRITE_HPP
27 #define FILESYSTEM_HARD_LINK_WRITE_HPP
28 
29 #include "../my_config.h"
30 
31 extern "C"
32 {
33 #if HAVE_UNISTD_H
34 #include <unistd.h>
35 #endif
36 
37 #if HAVE_SYS_STAT_H
38 #include <sys/stat.h>
39 #endif
40 } // end extern "C"
41 
42 #include <map>
43 #include "catalogue.hpp"
44 #include "infinint.hpp"
45 #include "fsa_family.hpp"
46 #include "cat_all_entrees.hpp"
47 
48 #include <set>
49 
50 namespace libdar
51 {
54 
56 
58  {
59  // this class is not to be used directly
60  // it only provides routines to its inherited classes
61 
62  public:
63  filesystem_hard_link_write(const std::shared_ptr<user_interaction> & dialog): mem_ui(dialog) { corres_write.clear(); };
66  filesystem_hard_link_write & operator = (const filesystem_hard_link_write & ref) = delete;
67  filesystem_hard_link_write & operator = (filesystem_hard_link_write && ref) = delete;
68  ~filesystem_hard_link_write() = default;
69 
70  void write_hard_linked_target_if_not_set(const cat_mirage *ref, const std::string & chemin);
71  // if a hard linked inode has not been restored (no change, or less recent than the one on filesystem)
72  // it is necessary to inform filesystem, where to hard link on, any future hard_link
73  // that could be necessary to restore.
74 
76  bool known_etiquette(const infinint & eti);
77 
79 
82  void clear_corres_if_pointing_to(const infinint & ligne, const std::string & path);
83 
84  protected:
85  void corres_reset() { corres_write.clear(); };
86 
88 
91  void make_file(const cat_nomme * ref,
92  const path & ou);
93 
95 
103  bool raw_set_ea(const cat_nomme *e,
104  const ea_attributs & list_ea,
105  const std::string & spot,
106  const mask & ea_mask);
107  // check whether the inode for which to restore EA is not a hard link to
108  // an already restored inode. if not, it calls the proper ea_filesystem call to restore EA
109 
111 
115  bool raw_clear_ea_set(const cat_nomme *e, const std::string & path);
116 
117 
118  private:
119  struct corres_ino_ea
120  {
121  std::string chemin;
122  bool ea_restored;
123  };
124 
125  std::map <infinint, corres_ino_ea> corres_write;
126  };
127 
129 
130 } // end of namespace
131 
132 #endif
include file gathering all entree found in a catalogue
here is defined the classe used to manage catalogue of archives
the hard link implementation, cat_mirage is the named entry owned by a directory it points to a commo...
Definition: cat_mirage.hpp:48
the base class for all entry that have a name
Definition: cat_nomme.hpp:45
the class ea_attributs manages the set of EA that can be associated to an inode
Definition: ea.hpp:49
the arbitrary large positive integer class
the generic class, parent of all masks
Definition: mask.hpp:62
class mem_ui to keep a copy of a user_interaction object
Definition: mem_ui.hpp:55
mem_ui(const std::shared_ptr< user_interaction > &dialog)
constructor
the class path is here to manipulate paths in the Unix notation: using'/'
Definition: path.hpp:51
filesystem specific attributes available families and fsa_scope definition
switch module to limitint (32 ou 64 bits integers) or infinint
libdar namespace encapsulate all libdar symbols
Definition: archive.hpp:47