Annotation of win32/apache22/srclib/apr/include/apr_general.h, revision 1.1
1.1 ! moko 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 */
E-mail: