00001 /* 00002 * Copyright (c) 1992, 1993 00003 * The Regents of the University of California. All rights reserved. 00004 * 00005 * Redistribution and use in source and binary forms, with or without 00006 * modification, are permitted provided that the following conditions 00007 * are met: 00008 * 1. Redistributions of source code must retain the above copyright 00009 * notice, this list of conditions and the following disclaimer. 00010 * 2. Redistributions in binary form must reproduce the above copyright 00011 * notice, this list of conditions and the following disclaimer in the 00012 * documentation and/or other materials provided with the distribution. 00013 * 3. All advertising materials mentioning features or use of this software 00014 * must display the following acknowledgement: 00015 * This product includes software developed by the University of 00016 * California, Berkeley and its contributors. 00017 * 4. Neither the name of the University nor the names of its contributors 00018 * may be used to endorse or promote products derived from this software 00019 * without specific prior written permission. 00020 * 00021 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 00022 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 00023 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 00024 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 00025 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 00026 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 00027 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 00028 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 00029 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 00030 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 00031 * SUCH DAMAGE. 00032 * 00033 * @(#)fnmatch.h 8.1 (Berkeley) 6/2/93 00034 */ 00035 00036 /* This file has been modified by the Apache Software Foundation. */ 00037 #ifndef _APR_FNMATCH_H_ 00038 #define _APR_FNMATCH_H_ 00039 00040 /** 00041 * @file apr_fnmatch.h 00042 * @brief APR FNMatch Functions 00043 */ 00044 00045 #include "apr_errno.h" 00046 #include "apr_tables.h" 00047 00048 #ifdef __cplusplus 00049 extern "C" { 00050 #endif 00051 00052 /** 00053 * @defgroup apr_fnmatch Filename Matching Functions 00054 * @ingroup APR 00055 * @{ 00056 */ 00057 00058 #define APR_FNM_NOMATCH 1 /**< Match failed. */ 00059 00060 #define APR_FNM_NOESCAPE 0x01 /**< Disable backslash escaping. */ 00061 #define APR_FNM_PATHNAME 0x02 /**< Slash must be matched by slash. */ 00062 #define APR_FNM_PERIOD 0x04 /**< Period must be matched by period. */ 00063 #define APR_FNM_CASE_BLIND 0x08 /**< Compare characters case-insensitively. */ 00064 00065 /** 00066 * Try to match the string to the given pattern, return APR_SUCCESS if 00067 * match, else return APR_FNM_NOMATCH. Note that there is no such thing as 00068 * an illegal pattern. 00069 * 00070 * With all flags unset, a pattern is interpreted as such: 00071 * 00072 * PATTERN: Backslash followed by any character, including another 00073 * backslash.<br/> 00074 * MATCHES: That character exactly. 00075 * 00076 * <p> 00077 * PATTERN: ?<br/> 00078 * MATCHES: Any single character. 00079 * </p> 00080 * 00081 * <p> 00082 * PATTERN: *<br/> 00083 * MATCHES: Any sequence of zero or more characters. (Note that multiple 00084 * *s in a row are equivalent to one.) 00085 * 00086 * PATTERN: Any character other than \?*[ or a \ at the end of the pattern<br/> 00087 * MATCHES: That character exactly. (Case sensitive.) 00088 * 00089 * PATTERN: [ followed by a class description followed by ]<br/> 00090 * MATCHES: A single character described by the class description. 00091 * (Never matches, if the class description reaches until the 00092 * end of the string without a ].) If the first character of 00093 * the class description is ^ or !, the sense of the description 00094 * is reversed. The rest of the class description is a list of 00095 * single characters or pairs of characters separated by -. Any 00096 * of those characters can have a backslash in front of them, 00097 * which is ignored; this lets you use the characters ] and - 00098 * in the character class, as well as ^ and ! at the 00099 * beginning. The pattern matches a single character if it 00100 * is one of the listed characters or falls into one of the 00101 * listed ranges (inclusive, case sensitive). Ranges with 00102 * the first character larger than the second are legal but 00103 * never match. Edge cases: [] never matches, and [^] and [!] 00104 * always match without consuming a character. 00105 * 00106 * Note that these patterns attempt to match the entire string, not 00107 * just find a substring matching the pattern. 00108 * 00109 * @param pattern The pattern to match to 00110 * @param strings The string we are trying to match 00111 * @param flags flags to use in the match. Bitwise OR of: 00112 * <pre> 00113 * APR_FNM_NOESCAPE Disable backslash escaping 00114 * APR_FNM_PATHNAME Slash must be matched by slash 00115 * APR_FNM_PERIOD Period must be matched by period 00116 * APR_FNM_CASE_BLIND Compare characters case-insensitively. 00117 * </pre> 00118 */ 00119 00120 APR_DECLARE(apr_status_t) apr_fnmatch(const char *pattern, 00121 const char *strings, int flags); 00122 00123 /** 00124 * Determine if the given pattern is a regular expression. 00125 * @param pattern The pattern to search for glob characters. 00126 * @return non-zero if pattern has any glob characters in it 00127 */ 00128 APR_DECLARE(int) apr_fnmatch_test(const char *pattern); 00129 00130 /** 00131 * Find all files that match a specified pattern in a directory. 00132 * @param dir_pattern The pattern to use for finding files, appended 00133 * to the search directory. The pattern is anything following the 00134 * final forward or backward slash in the parameter. If no slash 00135 * is found, the current directory is searched. 00136 * @param result Array to use when storing the results 00137 * @param p The pool to use. 00138 * @return APR_SUCCESS if no processing errors occurred, APR error 00139 * code otherwise 00140 * @remark The returned array may be empty even if APR_SUCCESS was 00141 * returned. 00142 */ 00143 APR_DECLARE(apr_status_t) apr_match_glob(const char *dir_pattern, 00144 apr_array_header_t **result, 00145 apr_pool_t *p); 00146 00147 /** @} */ 00148 00149 #ifdef __cplusplus 00150 } 00151 #endif 00152 00153 #endif /* !_APR_FNMATCH_H_ */