1/**
2 * @file file_manip.h
3 * Useful file management helpers
4 *
5 * @remark Copyright 2002 OProfile authors
6 * @remark Read the file COPYING
7 *
8 * @author Philippe Elie
9 * @author John Levon
10 */
11
12#ifndef FILE_MANIP_H
13#define FILE_MANIP_H
14
15#include <string>
16#include <list>
17
18
19/**
20 * copy_file - copy a file.
21 * @param source        filename to copy from
22 * @param destination   filename to copy into
23 *
24 * the last modification time of the source file is preserved, file attribute
25 * and owner are preserved if possible. Return true if copying successful.
26 */
27bool copy_file(std::string const & source, std::string const & destination);
28
29/// return true if dir is an existing directory
30bool is_directory(std::string const & dirname);
31
32/**
33 * is_file_identical - check for identical files
34 * @param file1  first filename
35 * @param file2  second filename
36 *
37 * return true if the two filenames belong to the same file
38 */
39bool is_files_identical(std::string const & file1, std::string const & file2);
40
41/**
42 * op_realpath - resolve symlinks etc.
43 * Resolve a path as much as possible. Accounts for relative
44 * paths (from cwd), ".." and ".". For success, the target
45 * file must exist !
46 *
47 * Resolve a symbolic link as far as possible.
48 * Returns the original string on failure.
49 */
50std::string const op_realpath(std::string const & name);
51
52/// return true if the given file is readable
53bool op_file_readable(std::string const & file);
54
55/**
56 * @param file_list where to store result
57 * @param base_dir directory from where lookup start
58 * @param filter a filename filter
59 * @param recursive if true lookup in sub-directory
60 *
61 * create a filelist under base_dir, filtered by filter and optionally
62 * looking in sub-directory. If we look in sub-directory only sub-directory
63 * which match filter are traversed.
64 */
65bool create_file_list(std::list<std::string> & file_list,
66		      std::string const & base_dir,
67		      std::string const & filter = "*",
68		      bool recursive = false);
69
70/**
71 * op_dirname - get the path component of a filename
72 * @param file_name  filename
73 *
74 * Returns the path name of a filename with trailing '/' removed.
75 */
76std::string op_dirname(std::string const & file_name);
77
78/**
79 * op_basename - get the basename of a path
80 * @param path_name  path
81 *
82 * Returns the basename of a path with trailing '/' removed.
83 *
84 * Always use this instead of the C basename() - header order
85 * can affect behaviour  for basename("/")
86 */
87std::string op_basename(std::string const & path_name);
88
89#endif /* !FILE_MANIP_H */
90