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