/**
* @file file_manip.h
* Useful file management helpers
*
* @remark Copyright 2002 OProfile authors
* @remark Read the file COPYING
*
* @author Philippe Elie
* @author John Levon
*/
#ifndef FILE_MANIP_H
#define FILE_MANIP_H
#include <string>
#include <list>
/**
* copy_file - copy a file.
* @param source filename to copy from
* @param destination filename to copy into
*
* the last modification time of the source file is preserved, file attribute
* and owner are preserved if possible. Return true if copying successful.
*/
bool copy_file(std::string const & source, std::string const & destination);
/// return true if dir is an existing directory
bool is_directory(std::string const & dirname);
/**
* is_file_identical - check for identical files
* @param file1 first filename
* @param file2 second filename
*
* return true if the two filenames belong to the same file
*/
bool is_files_identical(std::string const & file1, std::string const & file2);
/**
* op_realpath - resolve symlinks etc.
* Resolve a path as much as possible. Accounts for relative
* paths (from cwd), ".." and ".". For success, the target
* file must exist !
*
* Resolve a symbolic link as far as possible.
* Returns the original string on failure.
*/
std::string const op_realpath(std::string const & name);
/// return true if the given file is readable
bool op_file_readable(std::string const & file);
/**
* @param file_list where to store result
* @param base_dir directory from where lookup start
* @param filter a filename filter
* @param recursive if true lookup in sub-directory
*
* create a filelist under base_dir, filtered by filter and optionally
* looking in sub-directory. If we look in sub-directory only sub-directory
* which match filter are traversed.
*/
bool create_file_list(std::list<std::string> & file_list,
std::string const & base_dir,
std::string const & filter = "*",
bool recursive = false);
/**
* op_dirname - get the path component of a filename
* @param file_name filename
*
* Returns the path name of a filename with trailing '/' removed.
*/
std::string op_dirname(std::string const & file_name);
/**
* op_basename - get the basename of a path
* @param path_name path
*
* Returns the basename of a path with trailing '/' removed.
*
* Always use this instead of the C basename() - header order
* can affect behaviour for basename("/")
*/
std::string op_basename(std::string const & path_name);
#endif /* !FILE_MANIP_H */