| /** |
| * @file op_file.h |
| * Useful file management helpers |
| * |
| * @remark Copyright 2002 OProfile authors |
| * @remark Read the file COPYING |
| * |
| * @author John Levon |
| * @author Philippe Elie |
| */ |
| |
| #ifndef OP_FILE_H |
| #define OP_FILE_H |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif |
| |
| #include <sys/types.h> |
| |
| /** |
| * op_file_readable - is a file readable |
| * @param file file name |
| * |
| * Return true if the given file is readable and regular. |
| * |
| * Beware of race conditions ! |
| */ |
| int op_file_readable(char const * file); |
| |
| /** |
| * op_get_mtime - get mtime of file |
| * @param file file name |
| * |
| * Returns the mtime of the given file or 0 on failure |
| */ |
| time_t op_get_mtime(char const * file); |
| |
| /** |
| * create_dir - create a directory |
| * @param dir the directory name to create |
| * |
| * Returns 0 on success. |
| */ |
| int create_dir(char const * dir); |
| |
| |
| /** |
| * create_path - create a path |
| * @param path the path to create |
| * |
| * create directory for each dir components in path |
| * the last path component is not considered as a directory |
| * but as a filename |
| * |
| * Returns 0 on success. |
| */ |
| int create_path(char const * path); |
| |
| /** |
| * Clients of get_matching_pathnames must provide their own implementation |
| * of get_pathname_callback. |
| */ |
| typedef void (*get_pathname_callback)(char const * pathname, void * name_list); |
| |
| /* This enum is intended solely for the use of get_matching_pathnames(), |
| * bit 0 is reserved for internal use..*/ |
| enum recursion_type { |
| NO_RECURSION = 2, |
| MATCH_ANY_ENTRY_RECURSION = 4, |
| MATCH_DIR_ONLY_RECURSION = 8, |
| }; |
| /** |
| * @param name_list where to store result |
| * @param get_pathname_callback client-provided callback function |
| * @param base_dir directory from where lookup starts |
| * @param filter a pathname filter |
| * @param recursion recursion_type -- see above enum and following description: |
| * NO_RECURSION: Find matching files from passed base_dir and call |
| * get_pathname_callback to add entry to name_list to be returned. |
| * MATCH_ANY_ENTRY_RECURSION: Starting at base_dir, for each entry in the |
| * dir that matches the filter: if entry is of type 'dir', recurse; |
| * else call get_pathname_callback to add entry to name_list to be |
| * returned. |
| * MATCH_DIR_ONLY_RECURSION: Starting at base_dir, if an entry in the |
| * dir is of type 'dir' and its complete pathname contains a match to |
| * the filter, call get_pathname_callback to add entry to name_list to |
| * be returned; else recurse. |
| * |
| * Returns 0 on success. |
| * |
| * Return a list of pathnames under base_dir, filtered by filter and optionally |
| * looking in sub-directory. See description above of the recursion_type |
| * parameter for more details. |
| * NOTE: For C clients: Your implementation of the get_pathname_callback |
| * function will probably dynamically allocate storage for elements |
| * added to name_list. If so, remember to free that memory when it's |
| * no longer needed. |
| */ |
| int get_matching_pathnames(void * name_list, get_pathname_callback, |
| char const * base_dir, char const * filter, |
| enum recursion_type recursion); |
| |
| |
| #ifdef __cplusplus |
| } |
| #endif |
| |
| #endif /* OP_FILE_H */ |