Bitcoin Core 28.99.0
P2P Digital Currency
Namespaces | Functions | Variables
fs_helpers.cpp File Reference
#include <util/fs_helpers.h>
#include <bitcoin-build-config.h>
#include <logging.h>
#include <sync.h>
#include <util/fs.h>
#include <util/syserror.h>
#include <cerrno>
#include <fstream>
#include <map>
#include <memory>
#include <optional>
#include <string>
#include <system_error>
#include <utility>
#include <fcntl.h>
#include <sys/resource.h>
#include <unistd.h>
Include dependency graph for fs_helpers.cpp:

Go to the source code of this file.

Namespaces

namespace  util
 

Functions

static std::map< std::string, std::unique_ptr< fsbridge::FileLock > > dir_locks GUARDED_BY (cs_dir_locks)
 A map that contains all the currently held directory locks. More...
 
LockResult util::LockDirectory (const fs::path &directory, const fs::path &lockfile_name, bool probe_only)
 
void UnlockDirectory (const fs::path &directory, const fs::path &lockfile_name)
 
void ReleaseDirectoryLocks ()
 Release all directory locks. More...
 
bool CheckDiskSpace (const fs::path &dir, uint64_t additional_bytes)
 
std::streampos GetFileSize (const char *path, std::streamsize max)
 Get the size of a file by scanning it. More...
 
bool FileCommit (FILE *file)
 Ensure file contents are fully committed to disk, using a platform-specific feature analogous to fsync(). More...
 
void DirectoryCommit (const fs::path &dirname)
 Sync directory contents. More...
 
bool TruncateFile (FILE *file, unsigned int length)
 
int RaiseFileDescriptorLimit (int nMinFD)
 this function tries to raise the file descriptor limit to the requested number. More...
 
void AllocateFileRange (FILE *file, unsigned int offset, unsigned int length)
 this function tries to make a particular range of a file allocated (corresponding to disk space) it is advisory, and the range specified in the arguments will never contain live data More...
 
bool RenameOver (fs::path src, fs::path dest)
 Rename src to dest. More...
 
bool TryCreateDirectories (const fs::path &p)
 Ignores exceptions thrown by create_directories if the requested directory exists. More...
 
std::string PermsToSymbolicString (fs::perms p)
 Convert fs::perms to symbolic string of the form 'rwxrwxrwx'. More...
 
std::optional< fs::perms > InterpretPermString (const std::string &s)
 Interpret a custom permissions level string as fs::perms. More...
 

Variables

static GlobalMutex cs_dir_locks
 Mutex to protect dir_locks. More...
 

Function Documentation

◆ AllocateFileRange()

void AllocateFileRange ( FILE *  file,
unsigned int  offset,
unsigned int  length 
)

this function tries to make a particular range of a file allocated (corresponding to disk space) it is advisory, and the range specified in the arguments will never contain live data

Definition at line 187 of file fs_helpers.cpp.

Here is the caller graph for this function:

◆ CheckDiskSpace()

bool CheckDiskSpace ( const fs::path dir,
uint64_t  additional_bytes 
)

Definition at line 93 of file fs_helpers.cpp.

Here is the caller graph for this function:

◆ DirectoryCommit()

void DirectoryCommit ( const fs::path dirname)

Sync directory contents.

This is required on some environments to ensure that newly created files are committed to disk.

Definition at line 139 of file fs_helpers.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ FileCommit()

bool FileCommit ( FILE *  file)

Ensure file contents are fully committed to disk, using a platform-specific feature analogous to fsync().

Definition at line 108 of file fs_helpers.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetFileSize()

std::streampos GetFileSize ( const char *  path,
std::streamsize  max = std::numeric_limits< std::streamsize >::max() 
)

Get the size of a file by scanning it.

Parameters
[in]pathThe file path
[in]maxStop seeking beyond this limit
Returns
The file size or max

Definition at line 101 of file fs_helpers.cpp.

Here is the caller graph for this function:

◆ GUARDED_BY()

static std::map< std::string, std::unique_ptr< fsbridge::FileLock > > dir_locks GUARDED_BY ( cs_dir_locks  )
static

A map that contains all the currently held directory locks.

After successful locking, these will be held here until the global destructor cleans them up and thus automatically unlocks them, or ReleaseDirectoryLocks is called.

◆ InterpretPermString()

std::optional< fs::perms > InterpretPermString ( const std::string &  s)

Interpret a custom permissions level string as fs::perms.

Parameters
[in]sPermission level string
Returns
Permissions as fs::perms

Definition at line 297 of file fs_helpers.cpp.

Here is the caller graph for this function:

◆ PermsToSymbolicString()

std::string PermsToSymbolicString ( fs::perms  p)

Convert fs::perms to symbolic string of the form 'rwxrwxrwx'.

Parameters
[in]pthe perms to be converted
Returns
Symbolic permissions string

Definition at line 274 of file fs_helpers.cpp.

Here is the caller graph for this function:

◆ RaiseFileDescriptorLimit()

int RaiseFileDescriptorLimit ( int  nMinFD)

this function tries to raise the file descriptor limit to the requested number.

It returns the actual file descriptor limit (which may be more or less than nMinFD)

Definition at line 163 of file fs_helpers.cpp.

Here is the caller graph for this function:

◆ ReleaseDirectoryLocks()

void ReleaseDirectoryLocks ( )

Release all directory locks.

This is used for unit testing only, at runtime the global destructor will take care of the locks.

Definition at line 87 of file fs_helpers.cpp.

Here is the caller graph for this function:

◆ RenameOver()

bool RenameOver ( fs::path  src,
fs::path  dest 
)

Rename src to dest.

Returns
true if the rename was successful.

Definition at line 249 of file fs_helpers.cpp.

Here is the caller graph for this function:

◆ TruncateFile()

bool TruncateFile ( FILE *  file,
unsigned int  length 
)

Definition at line 150 of file fs_helpers.cpp.

Here is the caller graph for this function:

◆ TryCreateDirectories()

bool TryCreateDirectories ( const fs::path p)

Ignores exceptions thrown by create_directories if the requested directory exists.

Specifically handles case where path p exists, but it wasn't possible for the user to write to the parent directory.

Definition at line 261 of file fs_helpers.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ UnlockDirectory()

void UnlockDirectory ( const fs::path directory,
const fs::path lockfile_name 
)

Definition at line 81 of file fs_helpers.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

Variable Documentation

◆ cs_dir_locks

GlobalMutex cs_dir_locks
static

Mutex to protect dir_locks.

Definition at line 45 of file fs_helpers.cpp.