github.com/krum110487/go-htaccess@v0.0.0-20240316004156-60641c8e7598/tests/data/apache_2_2_34/include/apr_fnmatch.h (about)

     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
    49  extern "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  
   120  APR_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   */
   128  APR_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   */
   143  APR_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_ */