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

     1  /* Licensed to the Apache Software Foundation (ASF) under one or more
     2   * contributor license agreements.  See the NOTICE file distributed with
     3   * this work for additional information regarding copyright ownership.
     4   * The ASF licenses this file to You under the Apache License, Version 2.0
     5   * (the "License"); you may not use this file except in compliance with
     6   * the License.  You may obtain a copy of the License at
     7   *
     8   *     http://www.apache.org/licenses/LICENSE-2.0
     9   *
    10   * Unless required by applicable law or agreed to in writing, software
    11   * distributed under the License is distributed on an "AS IS" BASIS,
    12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    13   * See the License for the specific language governing permissions and
    14   * limitations under the License.
    15   */
    16  
    17  #ifndef APR_GENERAL_H
    18  #define APR_GENERAL_H
    19  
    20  /**
    21   * @file apr_general.h
    22   * This is collection of oddballs that didn't fit anywhere else,
    23   * and might move to more appropriate headers with the release
    24   * of APR 1.0.
    25   * @brief APR Miscellaneous library routines
    26   */
    27  
    28  #include "apr.h"
    29  #include "apr_pools.h"
    30  #include "apr_errno.h"
    31  
    32  #if APR_HAVE_SIGNAL_H
    33  #include <signal.h>
    34  #endif
    35  
    36  #ifdef __cplusplus
    37  extern "C" {
    38  #endif /* __cplusplus */
    39  
    40  /**
    41   * @defgroup apr_general Miscellaneous library routines
    42   * @ingroup APR 
    43   * This is collection of oddballs that didn't fit anywhere else,
    44   * and might move to more appropriate headers with the release
    45   * of APR 1.0.
    46   * @{
    47   */
    48  
    49  /** FALSE */
    50  #ifndef FALSE
    51  #define FALSE 0
    52  #endif
    53  /** TRUE */
    54  #ifndef TRUE
    55  #define TRUE (!FALSE)
    56  #endif
    57  
    58  /** a space */
    59  #define APR_ASCII_BLANK  '\040'
    60  /** a carrige return */
    61  #define APR_ASCII_CR     '\015'
    62  /** a line feed */
    63  #define APR_ASCII_LF     '\012'
    64  /** a tab */
    65  #define APR_ASCII_TAB    '\011'
    66  
    67  /** signal numbers typedef */
    68  typedef int               apr_signum_t;
    69  
    70  /**
    71   * Finding offsets of elements within structures.
    72   * Taken from the X code... they've sweated portability of this stuff
    73   * so we don't have to.  Sigh...
    74   * @param p_type pointer type name
    75   * @param field  data field within the structure pointed to
    76   * @return offset
    77   */
    78  
    79  #if defined(CRAY) || (defined(__arm) && !(defined(LINUX) || defined(__FreeBSD__)))
    80  #ifdef __STDC__
    81  #define APR_OFFSET(p_type,field) _Offsetof(p_type,field)
    82  #else
    83  #ifdef CRAY2
    84  #define APR_OFFSET(p_type,field) \
    85          (sizeof(int)*((unsigned int)&(((p_type)NULL)->field)))
    86  
    87  #else /* !CRAY2 */
    88  
    89  #define APR_OFFSET(p_type,field) ((unsigned int)&(((p_type)NULL)->field))
    90  
    91  #endif /* !CRAY2 */
    92  #endif /* __STDC__ */
    93  #else /* ! (CRAY || __arm) */
    94  
    95  #define APR_OFFSET(p_type,field) \
    96          ((long) (((char *) (&(((p_type)NULL)->field))) - ((char *) NULL)))
    97  
    98  #endif /* !CRAY */
    99  
   100  /**
   101   * Finding offsets of elements within structures.
   102   * @param s_type structure type name
   103   * @param field  data field within the structure
   104   * @return offset
   105   */
   106  #if defined(offsetof) && !defined(__cplusplus)
   107  #define APR_OFFSETOF(s_type,field) offsetof(s_type,field)
   108  #else
   109  #define APR_OFFSETOF(s_type,field) APR_OFFSET(s_type*,field)
   110  #endif
   111  
   112  #ifndef DOXYGEN
   113  
   114  /* A couple of prototypes for functions in case some platform doesn't 
   115   * have it
   116   */
   117  #if (!APR_HAVE_STRCASECMP) && (APR_HAVE_STRICMP) 
   118  #define strcasecmp(s1, s2) stricmp(s1, s2)
   119  #elif (!APR_HAVE_STRCASECMP)
   120  int strcasecmp(const char *a, const char *b);
   121  #endif
   122  
   123  #if (!APR_HAVE_STRNCASECMP) && (APR_HAVE_STRNICMP)
   124  #define strncasecmp(s1, s2, n) strnicmp(s1, s2, n)
   125  #elif (!APR_HAVE_STRNCASECMP)
   126  int strncasecmp(const char *a, const char *b, size_t n);
   127  #endif
   128  
   129  #endif
   130  
   131  /**
   132   * Alignment macros
   133   */
   134  
   135  /* APR_ALIGN() is only to be used to align on a power of 2 boundary */
   136  #define APR_ALIGN(size, boundary) \
   137      (((size) + ((boundary) - 1)) & ~((boundary) - 1))
   138  
   139  /** Default alignment */
   140  #define APR_ALIGN_DEFAULT(size) APR_ALIGN(size, 8)
   141  
   142  
   143  /**
   144   * String and memory functions
   145   */
   146  
   147  /* APR_STRINGIFY is defined here, and also in apr_release.h, so wrap it */
   148  #ifndef APR_STRINGIFY
   149  /** Properly quote a value as a string in the C preprocessor */
   150  #define APR_STRINGIFY(n) APR_STRINGIFY_HELPER(n)
   151  /** Helper macro for APR_STRINGIFY */
   152  #define APR_STRINGIFY_HELPER(n) #n
   153  #endif
   154  
   155  #if (!APR_HAVE_MEMMOVE)
   156  #define memmove(a,b,c) bcopy(b,a,c)
   157  #endif
   158  
   159  #if (!APR_HAVE_MEMCHR)
   160  void *memchr(const void *s, int c, size_t n);
   161  #endif
   162  
   163  /** @} */
   164  
   165  /**
   166   * @defgroup apr_library Library initialization and termination
   167   * @{
   168   */
   169  
   170  /**
   171   * Setup any APR internal data structures.  This MUST be the first function 
   172   * called for any APR library. It is safe to call apr_initialize several
   173   * times as long as apr_terminate is called the same number of times.
   174   * @remark See apr_app_initialize if this is an application, rather than
   175   * a library consumer of apr.
   176   */
   177  APR_DECLARE(apr_status_t) apr_initialize(void);
   178  
   179  /**
   180   * Set up an application with normalized argc, argv (and optionally env) in
   181   * order to deal with platform-specific oddities, such as Win32 services,
   182   * code pages and signals.  This must be the first function called for any
   183   * APR program.
   184   * @param argc Pointer to the argc that may be corrected
   185   * @param argv Pointer to the argv that may be corrected
   186   * @param env Pointer to the env that may be corrected, may be NULL
   187   * @remark See apr_initialize if this is a library consumer of apr.
   188   * Otherwise, this call is identical to apr_initialize, and must be closed
   189   * with a call to apr_terminate at the end of program execution.
   190   */
   191  APR_DECLARE(apr_status_t) apr_app_initialize(int *argc, 
   192                                               char const * const * *argv, 
   193                                               char const * const * *env);
   194  
   195  /**
   196   * Tear down any APR internal data structures which aren't torn down 
   197   * automatically. apr_terminate must be called once for every call to
   198   * apr_initialize() or apr_app_initialize().
   199   * @remark An APR program must call this function at termination once it 
   200   *         has stopped using APR services.  The APR developers suggest using
   201   *         atexit to ensure this is called.  When using APR from a language
   202   *         other than C that has problems with the calling convention, use
   203   *         apr_terminate2() instead.
   204   */
   205  APR_DECLARE_NONSTD(void) apr_terminate(void);
   206  
   207  /**
   208   * Tear down any APR internal data structures which aren't torn down 
   209   * automatically, same as apr_terminate
   210   * @remark An APR program must call either the apr_terminate or apr_terminate2 
   211   *         function once it it has finished using APR services.  The APR 
   212   *         developers suggest using atexit(apr_terminate) to ensure this is done.
   213   *         apr_terminate2 exists to allow non-c language apps to tear down apr, 
   214   *         while apr_terminate is recommended from c language applications.
   215   */
   216  APR_DECLARE(void) apr_terminate2(void);
   217  
   218  /** @} */
   219  
   220  /**
   221   * @defgroup apr_random Random Functions
   222   * @{
   223   */
   224  
   225  #if APR_HAS_RANDOM || defined(DOXYGEN)
   226  
   227  /* TODO: I'm not sure this is the best place to put this prototype...*/
   228  /**
   229   * Generate random bytes.
   230   * @param buf Buffer to fill with random bytes
   231   * @param length Length of buffer in bytes
   232   */
   233  APR_DECLARE(apr_status_t) apr_generate_random_bytes(unsigned char * buf, 
   234                                                      apr_size_t length);
   235  
   236  #endif
   237  /** @} */
   238  
   239  #ifdef __cplusplus
   240  }
   241  #endif
   242  
   243  #endif  /* ! APR_GENERAL_H */