Disk ARchive  2.4.10
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups
libdar.hpp
Go to the documentation of this file.
1 /*********************************************************************/
2 // dar - disk archive - a backup/restoration program
3 // Copyright (C) 2002-2052 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18 //
19 // to contact the author : http://dar.linux.free.fr/email.html
20 /*********************************************************************/
21 
22  // NOTE : The following comments are used by doxygen to generate the documentation of reference
23 
35 
36 
45 
46 
54 
55 
59 
60 
61 
62 #ifndef LIBDAR_HPP
63 #define LIBDAR_HPP
64 
65 #include "../my_config.h"
66 
67 extern "C"
68 {
69 #if MUTEX_WORKS
70 #if HAVE_PTHREAD_H
71 #include <pthread.h>
72 #endif
73 #endif
74 }
75 
76 
77 #include <string>
78 #include "compressor.hpp"
79 #include "path.hpp"
80 #include "mask.hpp"
81 #include "integers.hpp"
82 #include "infinint.hpp"
83 #include "statistics.hpp"
84 #include "user_interaction.hpp"
85 #include "deci.hpp"
86 #include "archive.hpp"
87 #include "crypto.hpp"
88 #include "thread_cancellation.hpp"
90 
93 
95 #define LIBDAR_XXXXXXXX
96 
98 #define LIBDAR_NOEXCEPT 0
99 
100 #define LIBDAR_EMEMORY 1
101 
102 #define LIBDAR_EBUG 2
103 
104 #define LIBDAR_EINFININT 3
105 
106 #define LIBDAR_ELIMITINT 4
107 
108 #define LIBDAR_ERANGE 5
109 
110 #define LIBDAR_EDECI 6
111 
112 #define LIBDAR_EFEATURE 7
113 
114 #define LIBDAR_EHARDWARE 8
115 
116 #define LIBDAR_EUSER_ABORT 9
117 
118 #define LIBDAR_EDATA 10
119 
120 #define LIBDAR_ESCRIPT 11
121 
122 #define LIBDAR_ELIBCALL 12
123 
124 #define LIBDAR_UNKNOWN 13
125 
126 #define LIBDAR_ECOMPILATION 14
127 
128 #define LIBDAR_THREAD_CANCEL 15
129 
130 
132 namespace libdar
133 {
136 
137 
144 
146  // LIBDAR INITIALIZATION METHODS //
147  // //
148  // A FUNCTION OF THE get_version*() FAMILY *MUST* BE CALLED //
149  // BEFORE ANY OTHER FUNCTION OF THIS LIBRARY //
150  // //
151  // CLIENT PROGRAM MUST CHECK THAT THE MAJOR NUMBER RETURNED //
152  // BY THIS CALL IS NOT GREATER THAN THE VERSION USED AT COMPILATION //
153  // TIME. IF SO, THE PROGRAM MUST ABORT AND RETURN A WARNING TO THE //
154  // USER TELLING THE DYNAMICALLY LINKED VERSION IS TOO RECENT AND NOT //
155  // COMPATIBLE WITH THIS SOFTWARE. THE MESSAGE MUST INVITE THE USER //
156  // TO UPGRADE HIS SOFTWARE WITH A MORE RECENT VERSION COMPATIBLE WITH //
157  // THIS LIBDAR RELEASE. //
159 
161 
170  extern void get_version(U_I & major, U_I & medium, U_I & minor, bool init_libgcrypt = true);
171 
173 
185  extern void get_version_noexcept(U_I & major, U_I & medium, U_I & minor, U_16 & exception, std::string & except_msg, bool init_libgcrypt = true);
186 
187 
189  // CLOSING/CLEANING LIBDAR //
191 
192  // while libdar has only a single boolean as global variable
193  // that defines whether the library is initialized or not
194  // it must proceed to mutex, and dependent libraries initializations
195  // (liblzo, libgcrypt, etc.), which is done during the get_version() call
196  // Some library also need to clear some data so the following call
197  // is provided in that aim and must be called when libdar will no more
198  // be used by the application.
199 
200  extern void close_and_clean();
201 
202 
204  // WRAPPER FUNCTIONS AROUND archive class methods to trap exceptions and convert them in error code and message
205  // these are intended for C program/programmers not enough confident with C++.
206  //
207  // FOR LIBDAR C++ APPLICATIONS, YOU WOULD RATHER USE THE archive C++ CLASS THAN THESE FOLLOWING WRAPPERS
208  //
210 
211 
213 
218  const path & chem, const std::string & basename,
219  const std::string & extension,
220  const archive_options_read & options,
221  U_16 & exception,
222  std::string & except_msg);
223 
224 
226 
231  const path & fs_root,
232  const path & sauv_path,
233  const std::string & filename,
234  const std::string & extension,
235  const archive_options_create & options,
236  statistics * progressive_report,
237  U_16 & exception,
238  std::string & except_msg);
239 
240 
241 
243 
248  const path &sauv_path,
249  archive *ref_arch,
250  const std::string & filename,
251  const std::string & extension,
252  const archive_options_isolate & options,
253  U_16 & exception,
254  std::string & except_msg);
255 
257 
262  const path & sauv_path,
263  archive *ref_arch1,
264  const std::string & filename,
265  const std::string & extension,
266  const archive_options_merge & options,
267  statistics * progressive_report,
268  U_16 & exception,
269  std::string & except_msg);
270 
271 
273 
277  extern void close_archive_noexcept(archive *ptr,
278  U_16 & exception,
279  std::string & except_msg);
280 
281 
283 
288  archive *ptr,
289  const path &fs_root,
290  const archive_options_extract & options,
291  statistics * progressive_report,
292  U_16 & exception,
293  std::string & except_msg);
294 
295 
297 
301  extern void op_listing_noexcept(user_interaction & dialog,
302  archive *ptr,
303  const archive_options_listing & options,
304  U_16 & exception,
305  std::string & except_msg);
306 
307 
309 
314  archive *ptr,
315  const path & fs_root,
316  const archive_options_diff & options,
317  statistics * progressive_report,
318  U_16 & exception,
319  std::string & except_msg);
320 
321 
323 
328  archive *ptr,
329  const archive_options_test & options,
330  statistics * progressive_report,
331  U_16 & exception,
332  std::string & except_msg);
333 
334 
336 
340  extern bool get_children_of_noexcept(user_interaction & dialog,
341  archive *ptr,
342  const std::string & dir,
343  U_16 & exception,
344  std::string & except_msg);
345 
346 
347 
349  // TOOLS ROUTINES //
351 
352 
354 
364  extern char *libdar_str2charptr_noexcept(const std::string & x, U_16 & exception, std::string & except_msg);
365 
367  // THREAD CANCELLATION ROUTINES //
369 
370 #if MUTEX_WORKS
371 
372 
378  inline extern void cancel_thread(pthread_t tid, bool immediate = true, U_64 flag = 0) { thread_cancellation::cancel(tid, immediate, flag); }
379 
381 
384  inline extern bool cancel_status(pthread_t tid) { return thread_cancellation::cancel_status(tid); }
385 
387 
391  inline extern bool cancel_clear(pthread_t tid) { return thread_cancellation::clear_pending_request(tid); }
392 #endif
393 
394 
396 
397 } // end of namespace
398 
399 #endif