1/* 2 * Copyright (c) 1992, 1993 3 * The Regents of the University of California. All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright 9 * notice, this list of conditions and the following disclaimer. 10 * 2. Redistributions in binary form must reproduce the above copyright 11 * notice, this list of conditions and the following disclaimer in the 12 * documentation and/or other materials provided with the distribution. 13 * 3. All advertising materials mentioning features or use of this software 14 * must display the following acknowledgement: 15 * This product includes software developed by the University of 16 * California, Berkeley and its contributors. 17 * 4. Neither the name of the University nor the names of its contributors 18 * may be used to endorse or promote products derived from this software 19 * without specific prior written permission. 20 * 21 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 22 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 23 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 24 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 25 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 26 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 27 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 28 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 29 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 30 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 31 * SUCH DAMAGE. 32 * 33 * @(#)fnmatch.h 8.1 (Berkeley) 6/2/93 34 */ 35 36/* This file has been modified by the Apache Software Foundation. */ 37#ifndef _APR_FNMATCH_H_ 38#define _APR_FNMATCH_H_ 39 40/** 41 * @file apr_fnmatch.h 42 * @brief APR FNMatch Functions 43 */ 44 45#include "apr_errno.h" 46#include "apr_tables.h" 47 48#ifdef __cplusplus 49extern "C" { 50#endif 51 52/** 53 * @defgroup apr_fnmatch Filename Matching Functions 54 * @ingroup APR 55 * @{ 56 */ 57 58#define APR_FNM_NOMATCH 1 /**< Match failed. */ 59 60#define APR_FNM_NOESCAPE 0x01 /**< Disable backslash escaping. */ 61#define APR_FNM_PATHNAME 0x02 /**< Slash must be matched by slash. */ 62#define APR_FNM_PERIOD 0x04 /**< Period must be matched by period. */ 63#define APR_FNM_CASE_BLIND 0x08 /**< Compare characters case-insensitively. */ 64 65/** 66 * Try to match the string to the given pattern, return APR_SUCCESS if 67 * match, else return APR_FNM_NOMATCH. Note that there is no such thing as 68 * an illegal pattern. 69 * 70 * With all flags unset, a pattern is interpreted as such: 71 * 72 * PATTERN: Backslash followed by any character, including another 73 * backslash.<br/> 74 * MATCHES: That character exactly. 75 * 76 * <p> 77 * PATTERN: ?<br/> 78 * MATCHES: Any single character. 79 * </p> 80 * 81 * <p> 82 * PATTERN: *<br/> 83 * MATCHES: Any sequence of zero or more characters. (Note that multiple 84 * *s in a row are equivalent to one.) 85 * 86 * PATTERN: Any character other than \?*[ or a \ at the end of the pattern<br/> 87 * MATCHES: That character exactly. (Case sensitive.) 88 * 89 * PATTERN: [ followed by a class description followed by ]<br/> 90 * MATCHES: A single character described by the class description. 91 * (Never matches, if the class description reaches until the 92 * end of the string without a ].) If the first character of 93 * the class description is ^ or !, the sense of the description 94 * is reversed. The rest of the class description is a list of 95 * single characters or pairs of characters separated by -. Any 96 * of those characters can have a backslash in front of them, 97 * which is ignored; this lets you use the characters ] and - 98 * in the character class, as well as ^ and ! at the 99 * beginning. The pattern matches a single character if it 100 * is one of the listed characters or falls into one of the 101 * listed ranges (inclusive, case sensitive). Ranges with 102 * the first character larger than the second are legal but 103 * never match. Edge cases: [] never matches, and [^] and [!] 104 * always match without consuming a character. 105 * 106 * Note that these patterns attempt to match the entire string, not 107 * just find a substring matching the pattern. 108 * 109 * @param pattern The pattern to match to 110 * @param strings The string we are trying to match 111 * @param flags flags to use in the match. Bitwise OR of: 112 * <pre> 113 * APR_FNM_NOESCAPE Disable backslash escaping 114 * APR_FNM_PATHNAME Slash must be matched by slash 115 * APR_FNM_PERIOD Period must be matched by period 116 * APR_FNM_CASE_BLIND Compare characters case-insensitively. 117 * </pre> 118 */ 119 120APR_DECLARE(apr_status_t) apr_fnmatch(const char *pattern, 121 const char *strings, int flags); 122 123/** 124 * Determine if the given pattern is a regular expression. 125 * @param pattern The pattern to search for glob characters. 126 * @return non-zero if pattern has any glob characters in it 127 */ 128APR_DECLARE(int) apr_fnmatch_test(const char *pattern); 129 130/** 131 * Find all files that match a specified pattern in a directory. 132 * @param dir_pattern The pattern to use for finding files, appended 133 * to the search directory. The pattern is anything following the 134 * final forward or backward slash in the parameter. If no slash 135 * is found, the current directory is searched. 136 * @param result Array to use when storing the results 137 * @param p The pool to use. 138 * @return APR_SUCCESS if no processing errors occurred, APR error 139 * code otherwise 140 * @remark The returned array may be empty even if APR_SUCCESS was 141 * returned. 142 */ 143APR_DECLARE(apr_status_t) apr_match_glob(const char *dir_pattern, 144 apr_array_header_t **result, 145 apr_pool_t *p); 146 147/** @} */ 148 149#ifdef __cplusplus 150} 151#endif 152 153#endif /* !_APR_FNMATCH_H_ */ 154