/usr/include/dar/fichier_local.hpp is in libdar-dev 2.5.14+bis-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 | /*********************************************************************/
// dar - disk archive - a backup/restoration program
// Copyright (C) 2002-2052 Denis Corbin
//
// 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.
//
// to contact the author : http://dar.linux.free.fr/email.html
/*********************************************************************/
/// \file fichier_local.hpp
/// \brief class fichier_global definition. This is a full implementation/inherited class of class fichier_global
/// this type of object are generated by entrepot_local.
/// \ingroup Private
#ifndef FICHIER_LOCAL_HPP
#define FICHIER_LOCAL_HPP
#include "/usr/include/dar/libdar_my_config.h"
extern "C"
{
#if LIBDAR_HAS_UNISTD_H
#include <unistd.h>
#endif
} // end extern "C"
#include "/usr/include/dar/integers.hpp"
#include "/usr/include/dar/thread_cancellation.hpp"
#include "/usr/include/dar/label.hpp"
#include "/usr/include/dar/crc.hpp"
#include "/usr/include/dar/user_interaction.hpp"
#include "/usr/include/dar/mem_ui.hpp"
#include "/usr/include/dar/fichier_global.hpp"
#include <string>
namespace libdar
{
/// \addtogroup Private
/// @{
/// filesystem local files
class fichier_local : public fichier_global
{
public :
// constructors
fichier_local(user_interaction & dialog,
const std::string & chemin,
gf_mode m,
U_I permission,
bool fail_if_exists,
bool erase,
bool furtive_mode);
fichier_local(const std::string & chemin, bool furtive_mode = false); // builds a read-only object
fichier_local(const fichier_local & ref) : fichier_global(ref) { copy_from(ref); };
// assignment operator
const fichier_local & operator = (const fichier_local & ref) { detruit(); copy_parent_from(ref); copy_from(ref); return *this; };
// destructor
~fichier_local() { detruit(); };
/// set the ownership of the file
virtual void change_ownership(const std::string & user, const std::string & group);
/// change the permission of the file
virtual void change_permission(U_I perm);
/// return the size of the file
infinint get_size() const;
/// set posix_fadvise for the whole file
void fadvise(advise adv) const;
// inherited from generic_file
bool skippable(skippability direction, const infinint & amount) { return true; };
bool skip(const infinint & pos);
bool skip_to_eof();
bool skip_relative(S_I x);
infinint get_position() const;
/// provide the low level filedescriptor to the call and terminate()
///
/// \note this the caller duty to close() the provided filedescriptor
S_I give_fd_and_terminate() { int ret = filedesc; filedesc = -1; terminate(); return ret; };
protected :
// inherited from generic_file grand-parent class
void inherited_read_ahead(const infinint & amount) {}; // nothing done, calling readahead(2) could be added in the future
void inherited_sync_write() { fsync(); };
void inherited_flush_read() {}; // nothing stored in transit in this object
void inherited_terminate() { if(adv == advise_dontneed) fadvise(adv); };
// inherited from fichier_global parent class
U_I fichier_global_inherited_write(const char *a, U_I size);
bool fichier_global_inherited_read(char *a, U_I size, U_I & read, std::string & message);
private :
S_I filedesc;
advise adv;
void open(const std::string & chemin,
gf_mode m,
U_I permission,
bool fail_if_exists,
bool erase,
bool furtive_mode);
void copy_from(const fichier_local & ref);
void copy_parent_from(const fichier_local & ref);
void detruit() { if(filedesc >= 0) close(filedesc); filedesc = -1; };
int advise_to_int(advise arg) const;
/// sync the data to disk
/// this is necessary under Linux for better efficiency
/// before calling fadvise(advise_dontneed) else write pending blocks
/// would stay in the cache more time than necessary
void fsync() const;
};
/// @}
} // end of namespace
#endif
|