110e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project/**
210e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * @file op_file.h
310e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * Useful file management helpers
410e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project *
510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * @remark Copyright 2002 OProfile authors
610e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * @remark Read the file COPYING
710e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project *
810e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * @author John Levon
910e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * @author Philippe Elie
1010e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project */
1110e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project
1210e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#ifndef OP_FILE_H
1310e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#define OP_FILE_H
1410e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project
1510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#ifdef __cplusplus
1610e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Projectextern "C" {
1710e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#endif
1810e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project
1910e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#include <sys/types.h>
2010e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project
2110e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project/**
2210e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * op_file_readable - is a file readable
2310e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * @param file file name
2410e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project *
2510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * Return true if the given file is readable and regular.
2610e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project *
2710e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * Beware of race conditions !
2810e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project */
2910e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Projectint op_file_readable(char const * file);
3010e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project
3110e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project/**
3210e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * op_get_mtime - get mtime of file
3310e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * @param file  file name
3410e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project *
3510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * Returns the mtime of the given file or 0 on failure
3610e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project */
3710e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Projecttime_t op_get_mtime(char const * file);
3810e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project
3910e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project/**
4010e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * create_dir - create a directory
4110e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * @param dir  the directory name to create
4210e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project *
4310e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * Returns 0 on success.
4410e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project */
4510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Projectint create_dir(char const * dir);
4610e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project
4710e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project
4810e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project/**
4910e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * create_path - create a path
5010e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * @param path  the path to create
5110e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project *
5210e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * create directory for each dir components in path
5310e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * the last path component is not considered as a directory
5410e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * but as a filename
5510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project *
5610e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * Returns 0 on success.
5710e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project */
5810e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Projectint create_path(char const * path);
5910e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project
6010e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project/**
6110e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * Clients of get_matching_pathnames must provide their own implementation
6210e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * of get_pathname_callback.
6310e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project */
6410e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Projecttypedef void (*get_pathname_callback)(char const * pathname, void * name_list);
6510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project
6610e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project/* This enum is intended solely for the use of get_matching_pathnames(),
6710e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * bit 0 is reserved for internal use..*/
6810e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Projectenum recursion_type {
6910e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project	NO_RECURSION = 2,
7010e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project	MATCH_ANY_ENTRY_RECURSION = 4,
7110e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project	MATCH_DIR_ONLY_RECURSION = 8,
7210e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project};
7310e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project/**
7410e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * @param name_list where to store result
7510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * @param get_pathname_callback client-provided callback function
7610e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * @param base_dir directory from where lookup starts
7710e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * @param filter a pathname filter
7810e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * @param recursion recursion_type -- see above enum and following description:
7910e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project *	NO_RECURSION:  Find matching files from passed base_dir and call
8010e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project *          get_pathname_callback to add entry to name_list to be returned.
8110e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project *	MATCH_ANY_ENTRY_RECURSION: Starting at base_dir, for each entry in the
8210e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project *	   dir that matches the filter: if entry is of type 'dir', recurse;
8310e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project *         else call get_pathname_callback to add entry to name_list to be
8410e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project *         returned.
8510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project *	MATCH_DIR_ONLY_RECURSION: Starting at base_dir, if an entry in the
8610e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project *         dir is of type 'dir' and its complete pathname contains a match to
8710e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project *         the filter, call get_pathname_callback to add entry to name_list to
8810e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project *         be returned; else recurse.
8910e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project *
9010e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * Returns 0 on success.
9110e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project *
9210e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * Return a list of pathnames under base_dir, filtered by filter and optionally
9310e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * looking in sub-directory. See description above of the recursion_type
9410e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * parameter for more details.
9510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project *    NOTE: For C clients: Your implementation of the get_pathname_callback
9610e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project *          function will probably dynamically allocate storage for elements
9710e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project *          added to name_list.  If so, remember to free that memory when it's
9810e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project *          no longer needed.
9910e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project */
10010e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Projectint get_matching_pathnames(void * name_list, get_pathname_callback,
10110e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project			   char const * base_dir, char const * filter,
10210e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project			   enum recursion_type recursion);
10310e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project
10410e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project
10510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#ifdef __cplusplus
10610e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project}
10710e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#endif
10810e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project
10910e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#endif /* OP_FILE_H */
110