libzypp 17.31.23
zypp::filesystem Namespace Reference

Types and functions for filesystem operations. More...

Classes

class  DevInoCache
 Simple cache remembering device/inode to detect hardlinks. More...
 
struct  DirEntry
 Listentry returned by readdir. More...
 
class  Glob
 Find pathnames matching a pattern. More...
 
class  PathInfo
 Wrapper class for stat/lstat. More...
 
class  Pathname
 Pathname. More...
 
class  StatMode
 Wrapper class for mode_t values as derived from ::stat. More...
 
class  TmpDir
 Provide a new empty temporary directory and recursively delete it when no longer needed. More...
 
class  TmpFile
 Provide a new empty temporary file and delete it when no longer needed. More...
 
class  TmpPath
 Automaticaly deletes files or directories when no longer needed. More...
 

Enumerations

enum  FileType {
  FT_NOT_AVAIL = 0x00 , FT_NOT_EXIST = 0x01 , FT_FILE = 0x02 , FT_DIR = 0x04 ,
  FT_CHARDEV = 0x08 , FT_BLOCKDEV = 0x10 , FT_FIFO = 0x20 , FT_LINK = 0x40 ,
  FT_SOCKET = 0x80
}
 File type information. More...
 

Functions

std::ostream & operator<< (std::ostream &str, const Glob &obj)
 
 ZYPP_DECLARE_OPERATORS_FOR_FLAGS (Glob::Flags)
 
const StrMatchermatchNoDots ()
 Convenience returning StrMatcher( "[^.]*", Match::GLOB )
 
int dirForEach (const Pathname &dir_r, const StrMatcher &matcher_r, function< bool(const Pathname &, const char *const)> fnc_r)
 
std::ostream & operator<< (std::ostream &str, FileType obj)
 
std::ostream & operator<< (std::ostream &str, const StatMode &obj)
 
std::ostream & operator<< (std::ostream &str, const PathInfo &obj)
 
static int recursive_rmdir_1 (const Pathname &dir, bool removeDir=true)
 
template<typename F >
int dirForEachImpl (const Pathname &dir_r, F &&fnc_r)
 
std::ostream & operator<< (std::ostream &str, const TmpPath &obj)
 Stream output as pathname.
 
File related functions.
int unlink (const Pathname &path)
 Like 'unlink'.
 
int rename (const Pathname &oldpath, const Pathname &newpath)
 Like 'rename'.
 
int exchange (const Pathname &lpath, const Pathname &rpath)
 Exchanges two files or directories.
 
int copy (const Pathname &file, const Pathname &dest)
 Like 'cp file dest'.
 
int symlink (const Pathname &oldpath, const Pathname &newpath)
 Like 'symlink'.
 
int hardlink (const Pathname &oldpath, const Pathname &newpath)
 Like '::link'.
 
int hardlinkCopy (const Pathname &oldpath, const Pathname &newpath)
 Create newpath as hardlink or copy of oldpath.
 
int readlink (const Pathname &symlink_r, Pathname &target_r)
 Like 'readlink'.
 
Pathname expandlink (const Pathname &path_r)
 Recursively follows the symlink pointed to by path_r and returns the Pathname to the real file or directory pointed to by the link.
 
int copy_file2dir (const Pathname &file, const Pathname &dest)
 Like 'cp file dest'.
 
int assert_file (const Pathname &path, unsigned mode=0644)
 Create an empty file if it does not yet exist.
 
int assert_file_mode (const Pathname &path, unsigned mode=0644)
 Like assert_file but enforce mode even if the file already exists.
 
int touch (const Pathname &path)
 Change file's modification and access times.
 
Pathname readlink (const Pathname &symlink_r)
 
Digest computaion.
Todo:
check cooperation with zypp::Digest
std::string md5sum (const Pathname &file)
 Compute a files md5sum.
 
std::string sha1sum (const Pathname &file)
 Compute a files sha1sum.
 
std::string checksum (const Pathname &file, const std::string &algorithm)
 Compute a files checksum.
 
bool is_checksum (const Pathname &file, const CheckSum &checksum)
 check files checksum
 
Changing permissions.
int chmod (const Pathname &path, mode_t mode)
 Like 'chmod'.
 
int addmod (const Pathname &path, mode_t mode)
 Add the mode bits to the file given by path.
 
int delmod (const Pathname &path, mode_t mode)
 Remove the mode bits from the file given by path.
 

Variables

template<class... T>
constexpr bool always_false = false
 

Misc.

enum  ZIP_TYPE { ZT_NONE , ZT_GZ , ZT_BZ2 , ZT_ZCHNK }
 Test whether a file is compressed (gzip/bzip2). More...
 
int erase (const Pathname &path)
 Erase whatever happens to be located at path (file or directory).
 
ZIP_TYPE zipType (const Pathname &file)
 
ByteCount df (const Pathname &path)
 Report free disk space on a mounted file system.
 
mode_t getUmask ()
 Get the current umask (file mode creation mask)
 
mode_t applyUmaskTo (mode_t mode_r)
 Modify mode_r according to the current umask ( mode_r & ~getUmask() ).
 

Directory related functions.

typedef std::list< DirEntryDirContent
 Returned by readdir.
 
int mkdir (const Pathname &path, unsigned mode=0755)
 Like 'mkdir'.
 
int assert_dir (const Pathname &path, unsigned mode=0755)
 Like 'mkdir -p'.
 
int rmdir (const Pathname &path)
 Like 'rmdir'.
 
int recursive_rmdir (const Pathname &path)
 Like 'rm -r DIR'.
 
int clean_dir (const Pathname &path)
 Like 'rm -r DIR/ *'.
 
int copy_dir (const Pathname &srcpath, const Pathname &destpath)
 Like 'cp -a srcpath destpath'.
 
int copy_dir_content (const Pathname &srcpath, const Pathname &destpath)
 Like 'cp -a srcpath/.
 
int dirForEach (const Pathname &dir_r, function< bool(const Pathname &, const char *const)> fnc_r)
 Invoke callback function fnc_r for each entry in directory dir_r.
 
int dirForEachExt (const Pathname &dir_r, const function< bool(const Pathname &, const DirEntry &)> &fnc_r)
 Simiar to.
 
int readdir (std::list< std::string > &retlist, const Pathname &path, bool dots=true)
 Return content of directory via retlist.
 
int readdir (std::list< Pathname > &retlist, const Pathname &path, bool dots=true)
 Return content of directory via retlist.
 
int readdir (DirContent &retlist, const Pathname &path, bool dots=true, PathInfo::Mode statmode=PathInfo::STAT)
 Return content of directory via retlist.
 
std::ostream & operator<< (std::ostream &str, const DirContent &obj)
 
int is_empty_dir (const Pathname &path)
 Check if the specified directory is empty.
 
std::ostream & operator<< (std::ostream &str, const DirEntry &obj)
 

Detailed Description

Types and functions for filesystem operations.

Todo:

move zypp::filesystem stuff into separate header

Add tmpfile and tmpdir handling.

think about using Exceptions in zypp::filesystem

provide a readdir iterator; at least provide an interface using an insert_iterator to be independent from std::container.

Todo:

move zypp::filesystem stuff into separate header

Add tmpfile and tmpdir handling.

think about using Exceptions in zypp::filesystem

provide a readdir iterator; at least provide an interface using an insert_iterator to be independent from std::container.

Typedef Documentation

◆ DirContent

Returned by readdir.

Definition at line 518 of file PathInfo.h.

Enumeration Type Documentation

◆ FileType

File type information.

Todo:
Think about an Enumeration Class
Enumerator
FT_NOT_AVAIL 
FT_NOT_EXIST 
FT_FILE 
FT_DIR 
FT_CHARDEV 
FT_BLOCKDEV 
FT_FIFO 
FT_LINK 
FT_SOCKET 

Definition at line 55 of file PathInfo.h.

◆ ZIP_TYPE

Test whether a file is compressed (gzip/bzip2).

Returns
ZT_GZ, ZT_BZ2 if file is compressed, otherwise ZT_NONE.
Enumerator
ZT_NONE 
ZT_GZ 
ZT_BZ2 
ZT_ZCHNK 

Definition at line 754 of file PathInfo.h.

Function Documentation

◆ operator<<() [1/7]

std::ostream & zypp::filesystem::operator<< ( std::ostream &  str,
const Glob obj 
)
related

Definition at line 53 of file Glob.cc.

◆ ZYPP_DECLARE_OPERATORS_FOR_FLAGS()

zypp::filesystem::ZYPP_DECLARE_OPERATORS_FOR_FLAGS ( Glob::Flags  )

◆ matchNoDots()

const StrMatcher & zypp::filesystem::matchNoDots ( )

Convenience returning StrMatcher( "[^.]*", Match::GLOB )

See also
dirForEach

Definition at line 26 of file PathInfo.cc.

◆ dirForEach() [1/2]

int zypp::filesystem::dirForEach ( const Pathname dir_r,
const StrMatcher matcher_r,
function< bool(const Pathname &, const char *const)>  fnc_r 
)

Definition at line 32 of file PathInfo.cc.

◆ operator<<() [2/7]

std::ostream & zypp::filesystem::operator<< ( std::ostream &  str,
FileType  obj 
)

Definition at line 47 of file PathInfo.cc.

◆ operator<<() [3/7]

std::ostream & zypp::filesystem::operator<< ( std::ostream &  str,
const StatMode obj 
)
related

Definition at line 95 of file PathInfo.cc.

◆ operator<<() [4/7]

std::ostream & zypp::filesystem::operator<< ( std::ostream &  str,
const PathInfo obj 
)
related

Definition at line 261 of file PathInfo.cc.

◆ mkdir()

int zypp::filesystem::mkdir ( const Pathname path,
unsigned  mode = 0755 
)

Like 'mkdir'.

Attempt to create a new directory named path. mode specifies the permissions to use. It is modified by the process's umask in the usual way.

Returns
0 on success, errno on failure

Definition at line 305 of file PathInfo.cc.

◆ assert_dir()

int zypp::filesystem::assert_dir ( const Pathname path,
unsigned  mode = 0755 
)

Like 'mkdir -p'.

No error if directory exists. Make parent directories as needed. mode specifies the permissions to use, if directories have to be created. It is modified by the process's umask in the usual way.

Returns
0 on success, errno on failure

Definition at line 319 of file PathInfo.cc.

◆ rmdir()

int zypp::filesystem::rmdir ( const Pathname path)

Like 'rmdir'.

Delete a directory, which must be empty.

Returns
0 on success, errno on failure

Definition at line 366 of file PathInfo.cc.

◆ recursive_rmdir_1()

static int zypp::filesystem::recursive_rmdir_1 ( const Pathname dir,
bool  removeDir = true 
)
static

Definition at line 380 of file PathInfo.cc.

◆ recursive_rmdir()

int zypp::filesystem::recursive_rmdir ( const Pathname path)

Like 'rm -r DIR'.

Delete a directory, recursively removing its contents.

Returns
0 on success, ENOTDIR if path is not a directory, otherwise the commands return value.

Definition at line 412 of file PathInfo.cc.

◆ clean_dir()

int zypp::filesystem::clean_dir ( const Pathname path)

Like 'rm -r DIR/ *'.

Delete directory contents, but keep the directory itself.

Returns
0 on success, ENOTDIR if path is not a directory, otherwise the commands return value.

Definition at line 442 of file PathInfo.cc.

◆ copy_dir()

int zypp::filesystem::copy_dir ( const Pathname srcpath,
const Pathname destpath 
)

Like 'cp -a srcpath destpath'.

Copy directory tree. srcpath/destpath must be directories. 'basename srcpath' must not exist in destpath.

Returns
0 on success, ENOTDIR if srcpath/destpath is not a directory, EEXIST if 'basename srcpath' exists in destpath, otherwise the commands return value.

Definition at line 463 of file PathInfo.cc.

◆ copy_dir_content()

int zypp::filesystem::copy_dir_content ( const Pathname srcpath,
const Pathname destpath 
)

Like 'cp -a srcpath/.

destpath'. Copy the content of srcpath recursively into destpath. Both srcpath and destpath has to exists.

Returns
0 on success, ENOTDIR if srcpath/destpath is not a directory, EEXIST if srcpath and destpath are equal, otherwise the commands return value.

Definition at line 504 of file PathInfo.cc.

◆ dirForEachImpl()

template<typename F >
int zypp::filesystem::dirForEachImpl ( const Pathname dir_r,
F &&  fnc_r 
)

Definition at line 547 of file PathInfo.cc.

◆ dirForEach() [2/2]

int zypp::filesystem::dirForEach ( const Pathname dir_r,
function< bool(const Pathname &, const char *const)>  fnc_r 
)

Invoke callback function fnc_r for each entry in directory dir_r.

If fnc_r is a NULL function 0 is returned immediately without even testing or accessing dir_r.

Otherwise readdir is used to read the name of every entry in dir_r, omitting '.' and '..'. dir_r and the current entries name are passed as arguments to fnc_r. If fnc_r returns false processing is aborted.

Returns
0 on success, -1 if aborted by callback, errno > 0 on readdir failure.

Definition at line 584 of file PathInfo.cc.

◆ dirForEachExt()

int zypp::filesystem::dirForEachExt ( const Pathname dir_r,
const function< bool(const Pathname &, const DirEntry &)> &  fnc_r 
)

Simiar to.

See also
dirForEach, except that the callback takes a
DirEntry as second argument

Definition at line 593 of file PathInfo.cc.

◆ readdir() [1/3]

int zypp::filesystem::readdir ( std::list< std::string > &  retlist,
const Pathname path,
bool  dots = true 
)

Return content of directory via retlist.

If dots is false entries starting with '.' are not reported. "." and ".." are never reported.

Returns just the directory entries as string.

Returns
0 on success, errno on failure.
Todo:
provide some readdirIterator.

Definition at line 605 of file PathInfo.cc.

◆ readdir() [2/3]

int zypp::filesystem::readdir ( std::list< Pathname > &  retlist,
const Pathname path,
bool  dots = true 
)

Return content of directory via retlist.

If dots is false entries starting with '.' are not reported. "." and ".." are never reported.

Returns the directory entries prefixed with path.

Returns
0 on success, errno on failure.
Todo:
provide some readdirIterator.

Definition at line 618 of file PathInfo.cc.

◆ readdir() [3/3]

int zypp::filesystem::readdir ( DirContent retlist,
const Pathname path,
bool  dots = true,
PathInfo::Mode  statmode = PathInfo::STAT 
)

Return content of directory via retlist.

If dots is false entries starting with '.' are not reported. "." and ".." are never reported.

The type of individual directory entries is determined accoding to statmode (i.e. via stat or lstat).

Returns
0 on success, errno on failure.

Definition at line 669 of file PathInfo.cc.

◆ operator<<() [5/7]

std::ostream & zypp::filesystem::operator<< ( std::ostream &  str,
const DirContent obj 
)

Definition at line 681 of file PathInfo.cc.

◆ is_empty_dir()

int zypp::filesystem::is_empty_dir ( const Pathname path)

Check if the specified directory is empty.

Parameters
pathThe path of the directory to check.
Returns
0 if directory is empty, -1 if not, errno > 0 on failure.

Definition at line 688 of file PathInfo.cc.

◆ unlink()

int zypp::filesystem::unlink ( const Pathname path)

Like 'unlink'.

Delete a file (symbolic link, socket, fifo or device).

Returns
0 on success, errno on failure

Definition at line 700 of file PathInfo.cc.

◆ rename()

int zypp::filesystem::rename ( const Pathname oldpath,
const Pathname newpath 
)

Like 'rename'.

Renames a file, moving it between directories if required. It falls back to using mv(1) in case errno is set to EXDEV, indicating a cross-device rename, which is likely to happen when oldpath and newpath are not on the same OverlayFS layer.

Returns
0 on success, errno on failure

Definition at line 742 of file PathInfo.cc.

◆ exchange()

int zypp::filesystem::exchange ( const Pathname lpath,
const Pathname rpath 
)

Exchanges two files or directories.

Most common use is when building a new config file (or dir) in a tempfile. After the job is done, configfile and tempfile are exchanged. This includes moving away the configfile in case the tempfile does not exist. Parent directories are created as needed.

Note
Paths are exchanged using rename, so take care both paths are located on the same filesystem.
Pathname configfile( "/etc/myconfig" );
TmpFile newconfig( TmpFile::makeSibling( configfile ) );
// now write the new config:
std::ofstream o( newconfig.path().c_str() );
o << "mew values << endl;
o.close();
// If everything is fine, exchange the files:
exchange( newconfig.path(), configfile );
// Now the old configfile is still available at newconfig.path()
// until newconfig goes out of scope.
Provide a new empty temporary file and delete it when no longer needed.
Definition: TmpPath.h:128
static TmpFile makeSibling(const Pathname &sibling_r)
Provide a new empty temporary directory as sibling.
Definition: TmpPath.cc:218
Returns
0 on success, errno on failure

Definition at line 756 of file PathInfo.cc.

◆ copy()

int zypp::filesystem::copy ( const Pathname file,
const Pathname dest 
)

Like 'cp file dest'.

Copy file to destination file.

Returns
0 on success, EINVAL if file is not a file, EISDIR if destiantion is a directory, otherwise the commands return value.

Definition at line 820 of file PathInfo.cc.

◆ symlink()

int zypp::filesystem::symlink ( const Pathname oldpath,
const Pathname newpath 
)

Like 'symlink'.

Creates a symbolic link named newpath which contains the string oldpath. If newpath exists it will not be overwritten.

Returns
0 on success, errno on failure.

Definition at line 855 of file PathInfo.cc.

◆ hardlink()

int zypp::filesystem::hardlink ( const Pathname oldpath,
const Pathname newpath 
)

Like '::link'.

Creates a hard link named newpath to an existing file oldpath. If newpath exists it will not be overwritten.

Returns
0 on success, errno on failure.

Definition at line 869 of file PathInfo.cc.

◆ hardlinkCopy()

int zypp::filesystem::hardlinkCopy ( const Pathname oldpath,
const Pathname newpath 
)

Create newpath as hardlink or copy of oldpath.

Returns
0 on success, errno on failure.

Definition at line 883 of file PathInfo.cc.

◆ readlink() [1/2]

int zypp::filesystem::readlink ( const Pathname symlink_r,
Pathname target_r 
)

Like 'readlink'.

Return the contents of the symbolic link symlink_r via target_r.

Returns
0 on success, errno on failure.

Definition at line 924 of file PathInfo.cc.

◆ expandlink()

Pathname zypp::filesystem::expandlink ( const Pathname path_r)

Recursively follows the symlink pointed to by path_r and returns the Pathname to the real file or directory pointed to by the link.

There is a recursion limit of 256 iterations to protect against a cyclic link.

Returns
Pathname of the file or directory pointed to by the given link if it is a valid link. If path_r is not a link, an exact copy of it is returned. If path_r is a broken or a cyclic link, an empty Pathname is returned and the event logged.

Definition at line 945 of file PathInfo.cc.

◆ copy_file2dir()

int zypp::filesystem::copy_file2dir ( const Pathname file,
const Pathname dest 
)

Like 'cp file dest'.

Copy file to dest dir.

Returns
0 on success, EINVAL if file is not a file, ENOTDIR if dest is no directory, otherwise the commands return value.

Definition at line 990 of file PathInfo.cc.

◆ md5sum()

std::string zypp::filesystem::md5sum ( const Pathname file)

Compute a files md5sum.

Returns
the files md5sum on success, otherwise an empty string..

Definition at line 1024 of file PathInfo.cc.

◆ sha1sum()

std::string zypp::filesystem::sha1sum ( const Pathname file)

Compute a files sha1sum.

Returns
the files sha1sum on success, otherwise an empty string..

Definition at line 1041 of file PathInfo.cc.

◆ checksum()

std::string zypp::filesystem::checksum ( const Pathname file,
const std::string &  algorithm 
)

Compute a files checksum.

Returns
the files checksum on success, otherwise an empty string..

Definition at line 1051 of file PathInfo.cc.

◆ is_checksum()

bool zypp::filesystem::is_checksum ( const Pathname file,
const CheckSum checksum 
)

check files checksum

Returns
true if the checksum matches (an empty Checksum always matches!)

Definition at line 1063 of file PathInfo.cc.

◆ erase()

int zypp::filesystem::erase ( const Pathname path)

Erase whatever happens to be located at path (file or directory).

Returns
0 on success.
Todo:
check cooperation with zypp::TmpFile and zypp::TmpDir

Definition at line 1073 of file PathInfo.cc.

◆ chmod()

int zypp::filesystem::chmod ( const Pathname path,
mode_t  mode 
)

Like 'chmod'.

The mode of the file given by path is changed.

Returns
0 on success, errno on failure

Definition at line 1092 of file PathInfo.cc.

◆ addmod()

int zypp::filesystem::addmod ( const Pathname path,
mode_t  mode 
)

Add the mode bits to the file given by path.

Returns
0 on success, errno on failure

Definition at line 1101 of file PathInfo.cc.

◆ delmod()

int zypp::filesystem::delmod ( const Pathname path,
mode_t  mode 
)

Remove the mode bits from the file given by path.

Returns
0 on success, errno on failure

Definition at line 1110 of file PathInfo.cc.

◆ zipType()

ZIP_TYPE zypp::filesystem::zipType ( const Pathname file)

Definition at line 1124 of file PathInfo.cc.

◆ df()

ByteCount zypp::filesystem::df ( const Pathname path)

Report free disk space on a mounted file system.

path is the path name of any file within the mounted filesystem.

Returns
Free disk space or -1 on error.

Definition at line 1155 of file PathInfo.cc.

◆ getUmask()

mode_t zypp::filesystem::getUmask ( )

Get the current umask (file mode creation mask)

Returns
The current umask

Definition at line 1171 of file PathInfo.cc.

◆ assert_file()

int zypp::filesystem::assert_file ( const Pathname path,
unsigned  mode = 0644 
)

Create an empty file if it does not yet exist.

Make parent directories as needed. mode specifies the permissions to use. It is modified by the process's umask in the usual way.

Returns
0 on success, errno on failure

Definition at line 1183 of file PathInfo.cc.

◆ assert_file_mode()

int zypp::filesystem::assert_file_mode ( const Pathname path,
unsigned  mode 
)

Like assert_file but enforce mode even if the file already exists.

Definition at line 1202 of file PathInfo.cc.

◆ touch()

int zypp::filesystem::touch ( const Pathname path)

Change file's modification and access times.

Returns
0 on success, errno on failure
See also
man utime

Definition at line 1234 of file PathInfo.cc.

◆ operator<<() [6/7]

std::ostream & zypp::filesystem::operator<< ( std::ostream &  str,
const DirEntry obj 
)
inline

Definition at line 514 of file PathInfo.h.

◆ readlink() [2/2]

Pathname zypp::filesystem::readlink ( const Pathname symlink_r)
inline

Definition at line 657 of file PathInfo.h.

◆ applyUmaskTo()

mode_t zypp::filesystem::applyUmaskTo ( mode_t  mode_r)
inline

Modify mode_r according to the current umask ( mode_r & ~getUmask() ).

See also
getUmask.
Returns
The resulting permissions.

Definition at line 789 of file PathInfo.h.

◆ operator<<() [7/7]

std::ostream & zypp::filesystem::operator<< ( std::ostream &  str,
const TmpPath obj 
)
inline

Stream output as pathname.

Definition at line 106 of file TmpPath.h.

Variable Documentation

◆ always_false

template<class... T>
constexpr bool zypp::filesystem::always_false = false
constexpr

Definition at line 544 of file PathInfo.cc.