Annotation of win32/apache22/srclib/apr/include/apr_strings.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: /* Portions of this file are covered by */
        !            18: /* -*- mode: c; c-file-style: "k&r" -*-
        !            19: 
        !            20:   strnatcmp.c -- Perform 'natural order' comparisons of strings in C.
        !            21:   Copyright (C) 2000 by Martin Pool <mbp@humbug.org.au>
        !            22: 
        !            23:   This software is provided 'as-is', without any express or implied
        !            24:   warranty.  In no event will the authors be held liable for any damages
        !            25:   arising from the use of this software.
        !            26: 
        !            27:   Permission is granted to anyone to use this software for any purpose,
        !            28:   including commercial applications, and to alter it and redistribute it
        !            29:   freely, subject to the following restrictions:
        !            30: 
        !            31:   1. The origin of this software must not be misrepresented; you must not
        !            32:      claim that you wrote the original software. If you use this software
        !            33:      in a product, an acknowledgment in the product documentation would be
        !            34:      appreciated but is not required.
        !            35:   2. Altered source versions must be plainly marked as such, and must not be
        !            36:      misrepresented as being the original software.
        !            37:   3. This notice may not be removed or altered from any source distribution.
        !            38: */
        !            39: 
        !            40: #ifndef APR_STRINGS_H
        !            41: #define APR_STRINGS_H
        !            42: 
        !            43: /**
        !            44:  * @file apr_strings.h
        !            45:  * @brief APR Strings library
        !            46:  */
        !            47: 
        !            48: #include "apr.h"
        !            49: #include "apr_errno.h"
        !            50: #include "apr_pools.h"
        !            51: #define APR_WANT_IOVEC
        !            52: #include "apr_want.h"
        !            53: 
        !            54: #if APR_HAVE_STDARG_H
        !            55: #include <stdarg.h>
        !            56: #endif
        !            57: 
        !            58: #ifdef __cplusplus
        !            59: extern "C" {
        !            60: #endif /* __cplusplus */
        !            61: 
        !            62: /**
        !            63:  * @defgroup apr_strings String routines
        !            64:  * @ingroup APR 
        !            65:  * @{
        !            66:  */
        !            67: 
        !            68: /**
        !            69:  * Do a natural order comparison of two strings.
        !            70:  * @param a The first string to compare
        !            71:  * @param b The second string to compare
        !            72:  * @return Either <0, 0, or >0.  If the first string is less than the second
        !            73:  *          this returns <0, if they are equivalent it returns 0, and if the
        !            74:  *          first string is greater than second string it retuns >0.
        !            75:  */
        !            76: APR_DECLARE(int) apr_strnatcmp(char const *a, char const *b);
        !            77: 
        !            78: /**
        !            79:  * Do a natural order comparison of two strings ignoring the case of the 
        !            80:  * strings.
        !            81:  * @param a The first string to compare
        !            82:  * @param b The second string to compare
        !            83:  * @return Either <0, 0, or >0.  If the first string is less than the second
        !            84:  *         this returns <0, if they are equivalent it returns 0, and if the
        !            85:  *         first string is greater than second string it retuns >0.
        !            86:  */
        !            87: APR_DECLARE(int) apr_strnatcasecmp(char const *a, char const *b);
        !            88: 
        !            89: /**
        !            90:  * duplicate a string into memory allocated out of a pool
        !            91:  * @param p The pool to allocate out of
        !            92:  * @param s The string to duplicate
        !            93:  * @return The new string
        !            94:  */
        !            95: APR_DECLARE(char *) apr_pstrdup(apr_pool_t *p, const char *s);
        !            96: 
        !            97: /**
        !            98:  * Create a null-terminated string by making a copy of a sequence
        !            99:  * of characters and appending a null byte
        !           100:  * @param p The pool to allocate out of
        !           101:  * @param s The block of characters to duplicate
        !           102:  * @param n The number of characters to duplicate
        !           103:  * @return The new string
        !           104:  * @remark This is a faster alternative to apr_pstrndup, for use
        !           105:  *         when you know that the string being duplicated really
        !           106:  *         has 'n' or more characters.  If the string might contain
        !           107:  *         fewer characters, use apr_pstrndup.
        !           108:  */
        !           109: APR_DECLARE(char *) apr_pstrmemdup(apr_pool_t *p, const char *s, apr_size_t n)
        !           110: #if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
        !           111:     __attribute__((alloc_size(3)))
        !           112: #endif
        !           113:     ;
        !           114: 
        !           115: /**
        !           116:  * Duplicate at most n characters of a string into memory allocated 
        !           117:  * out of a pool; the new string will be NUL-terminated
        !           118:  * @param p The pool to allocate out of
        !           119:  * @param s The string to duplicate
        !           120:  * @param n The maximum number of characters to duplicate
        !           121:  * @return The new string
        !           122:  * @remark The amount of memory allocated from the pool is the length
        !           123:  *         of the returned string including the NUL terminator
        !           124:  */
        !           125: APR_DECLARE(char *) apr_pstrndup(apr_pool_t *p, const char *s, apr_size_t n);
        !           126: 
        !           127: /**
        !           128:  * Duplicate a block of memory.
        !           129:  *
        !           130:  * @param p The pool to allocate from
        !           131:  * @param m The memory to duplicate
        !           132:  * @param n The number of bytes to duplicate
        !           133:  * @return The new block of memory
        !           134:  */
        !           135: APR_DECLARE(void *) apr_pmemdup(apr_pool_t *p, const void *m, apr_size_t n)
        !           136: #if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
        !           137:     __attribute__((alloc_size(3)))
        !           138: #endif
        !           139:     ;
        !           140: 
        !           141: /**
        !           142:  * Concatenate multiple strings, allocating memory out a pool
        !           143:  * @param p The pool to allocate out of
        !           144:  * @param ... The strings to concatenate.  The final string must be NULL
        !           145:  * @return The new string
        !           146:  */
        !           147: APR_DECLARE_NONSTD(char *) apr_pstrcat(apr_pool_t *p, ...)
        !           148: #if defined(__GNUC__) && __GNUC__ >= 4
        !           149:     __attribute__((sentinel))
        !           150: #endif
        !           151:     ;
        !           152: 
        !           153: /**
        !           154:  * Concatenate multiple strings specified in a writev-style vector
        !           155:  * @param p The pool from which to allocate
        !           156:  * @param vec The strings to concatenate
        !           157:  * @param nvec The number of strings to concatenate
        !           158:  * @param nbytes (output) strlen of new string (pass in NULL to omit)
        !           159:  * @return The new string
        !           160:  */
        !           161: APR_DECLARE(char *) apr_pstrcatv(apr_pool_t *p, const struct iovec *vec,
        !           162:                                  apr_size_t nvec, apr_size_t *nbytes);
        !           163: 
        !           164: /**
        !           165:  * printf-style style printing routine.  The data is output to a string 
        !           166:  * allocated from a pool
        !           167:  * @param p The pool to allocate out of
        !           168:  * @param fmt The format of the string
        !           169:  * @param ap The arguments to use while printing the data
        !           170:  * @return The new string
        !           171:  */
        !           172: APR_DECLARE(char *) apr_pvsprintf(apr_pool_t *p, const char *fmt, va_list ap);
        !           173: 
        !           174: /**
        !           175:  * printf-style style printing routine.  The data is output to a string 
        !           176:  * allocated from a pool
        !           177:  * @param p The pool to allocate out of
        !           178:  * @param fmt The format of the string
        !           179:  * @param ... The arguments to use while printing the data
        !           180:  * @return The new string
        !           181:  */
        !           182: APR_DECLARE_NONSTD(char *) apr_psprintf(apr_pool_t *p, const char *fmt, ...)
        !           183:         __attribute__((format(printf,2,3)));
        !           184: 
        !           185: /**
        !           186:  * Copy up to dst_size characters from src to dst; does not copy
        !           187:  * past a NUL terminator in src, but always terminates dst with a NUL
        !           188:  * regardless.
        !           189:  * @param dst The destination string
        !           190:  * @param src The source string
        !           191:  * @param dst_size The space available in dst; dst always receives
        !           192:  *                 NUL termination, so if src is longer than
        !           193:  *                 dst_size, the actual number of characters copied is
        !           194:  *                 dst_size - 1.
        !           195:  * @return Pointer to the NUL terminator of the destination string, dst
        !           196:  * @remark
        !           197:  * <PRE>
        !           198:  * Note the differences between this function and strncpy():
        !           199:  *  1) strncpy() doesn't always NUL terminate; apr_cpystrn() does.
        !           200:  *  2) strncpy() pads the destination string with NULs, which is often 
        !           201:  *     unnecessary; apr_cpystrn() does not.
        !           202:  *  3) strncpy() returns a pointer to the beginning of the dst string;
        !           203:  *     apr_cpystrn() returns a pointer to the NUL terminator of dst, 
        !           204:  *     to allow a check for truncation.
        !           205:  * </PRE>
        !           206:  */
        !           207: APR_DECLARE(char *) apr_cpystrn(char *dst, const char *src,
        !           208:                                 apr_size_t dst_size);
        !           209: 
        !           210: /**
        !           211:  * Remove all whitespace from a string
        !           212:  * @param dest The destination string.  It is okay to modify the string
        !           213:  *             in place.  Namely dest == src
        !           214:  * @param src The string to rid the spaces from.
        !           215:  * @return A pointer to the destination string's null terminator.
        !           216:  */
        !           217: APR_DECLARE(char *) apr_collapse_spaces(char *dest, const char *src);
        !           218: 
        !           219: /**
        !           220:  * Convert the arguments to a program from one string to an array of 
        !           221:  * strings terminated by a NULL pointer
        !           222:  * @param arg_str The arguments to convert
        !           223:  * @param argv_out Output location.  This is a pointer to an array of strings.
        !           224:  * @param token_context Pool to use.
        !           225:  */
        !           226: APR_DECLARE(apr_status_t) apr_tokenize_to_argv(const char *arg_str,
        !           227:                                                char ***argv_out,
        !           228:                                                apr_pool_t *token_context);
        !           229: 
        !           230: /**
        !           231:  * Split a string into separate null-terminated tokens.  The tokens are 
        !           232:  * delimited in the string by one or more characters from the sep
        !           233:  * argument.
        !           234:  * @param str The string to separate; this should be specified on the
        !           235:  *            first call to apr_strtok() for a given string, and NULL
        !           236:  *            on subsequent calls.
        !           237:  * @param sep The set of delimiters
        !           238:  * @param last Internal state saved by apr_strtok() between calls.
        !           239:  * @return The next token from the string
        !           240:  */
        !           241: APR_DECLARE(char *) apr_strtok(char *str, const char *sep, char **last);
        !           242: 
        !           243: /**
        !           244:  * @defgroup APR_Strings_Snprintf snprintf implementations
        !           245:  * @warning
        !           246:  * These are snprintf implementations based on apr_vformatter().
        !           247:  *
        !           248:  * Note that various standards and implementations disagree on the return
        !           249:  * value of snprintf, and side-effects due to %n in the formatting string.
        !           250:  * apr_snprintf (and apr_vsnprintf) behaves as follows:
        !           251:  *
        !           252:  * Process the format string until the entire string is exhausted, or
        !           253:  * the buffer fills.  If the buffer fills then stop processing immediately
        !           254:  * (so no further %n arguments are processed), and return the buffer
        !           255:  * length.  In all cases the buffer is NUL terminated. It will return the
        !           256:  * number of characters inserted into the buffer, not including the
        !           257:  * terminating NUL. As a special case, if len is 0, apr_snprintf will
        !           258:  * return the number of characters that would have been inserted if
        !           259:  * the buffer had been infinite (in this case, *buffer can be NULL)
        !           260:  *
        !           261:  * In no event does apr_snprintf return a negative number.
        !           262:  * @{
        !           263:  */
        !           264: 
        !           265: /**
        !           266:  * snprintf routine based on apr_vformatter.  This means it understands the
        !           267:  * same extensions.
        !           268:  * @param buf The buffer to write to
        !           269:  * @param len The size of the buffer
        !           270:  * @param format The format string
        !           271:  * @param ... The arguments to use to fill out the format string.
        !           272:  */
        !           273: APR_DECLARE_NONSTD(int) apr_snprintf(char *buf, apr_size_t len,
        !           274:                                      const char *format, ...)
        !           275:         __attribute__((format(printf,3,4)));
        !           276: 
        !           277: /**
        !           278:  * vsnprintf routine based on apr_vformatter.  This means it understands the
        !           279:  * same extensions.
        !           280:  * @param buf The buffer to write to
        !           281:  * @param len The size of the buffer
        !           282:  * @param format The format string
        !           283:  * @param ap The arguments to use to fill out the format string.
        !           284:  */
        !           285: APR_DECLARE(int) apr_vsnprintf(char *buf, apr_size_t len, const char *format,
        !           286:                                va_list ap);
        !           287: /** @} */
        !           288: 
        !           289: /**
        !           290:  * create a string representation of an int, allocated from a pool
        !           291:  * @param p The pool from which to allocate
        !           292:  * @param n The number to format
        !           293:  * @return The string representation of the number
        !           294:  */
        !           295: APR_DECLARE(char *) apr_itoa(apr_pool_t *p, int n);
        !           296: 
        !           297: /**
        !           298:  * create a string representation of a long, allocated from a pool
        !           299:  * @param p The pool from which to allocate
        !           300:  * @param n The number to format
        !           301:  * @return The string representation of the number
        !           302:  */
        !           303: APR_DECLARE(char *) apr_ltoa(apr_pool_t *p, long n);
        !           304: 
        !           305: /**
        !           306:  * create a string representation of an apr_off_t, allocated from a pool
        !           307:  * @param p The pool from which to allocate
        !           308:  * @param n The number to format
        !           309:  * @return The string representation of the number
        !           310:  */
        !           311: APR_DECLARE(char *) apr_off_t_toa(apr_pool_t *p, apr_off_t n);
        !           312: 
        !           313: /**
        !           314:  * Convert a numeric string into an apr_off_t numeric value.
        !           315:  * @param offset The value of the parsed string.
        !           316:  * @param buf The string to parse. It may contain optional whitespace,
        !           317:  *   followed by an optional '+' (positive, default) or '-' (negative)
        !           318:  *   character, followed by an optional '0x' prefix if base is 0 or 16,
        !           319:  *   followed by numeric digits appropriate for base.
        !           320:  * @param end A pointer to the end of the valid character in buf. If
        !           321:  *   not NULL, it is set to the first invalid character in buf.
        !           322:  * @param base A numeric base in the range between 2 and 36 inclusive,
        !           323:  *   or 0.  If base is zero, buf will be treated as base ten unless its
        !           324:  *   digits are prefixed with '0x', in which case it will be treated as
        !           325:  *   base 16.
        !           326:  * @bug *end breaks type safety; where *buf is const, *end needs to be
        !           327:  * declared as const in APR 2.0
        !           328:  */
        !           329: APR_DECLARE(apr_status_t) apr_strtoff(apr_off_t *offset, const char *buf, 
        !           330:                                       char **end, int base);
        !           331: 
        !           332: /**
        !           333:  * parse a numeric string into a 64-bit numeric value
        !           334:  * @param buf The string to parse. It may contain optional whitespace,
        !           335:  *   followed by an optional '+' (positive, default) or '-' (negative)
        !           336:  *   character, followed by an optional '0x' prefix if base is 0 or 16,
        !           337:  *   followed by numeric digits appropriate for base.
        !           338:  * @param end A pointer to the end of the valid character in buf. If
        !           339:  *   not NULL, it is set to the first invalid character in buf.
        !           340:  * @param base A numeric base in the range between 2 and 36 inclusive,
        !           341:  *   or 0.  If base is zero, buf will be treated as base ten unless its
        !           342:  *   digits are prefixed with '0x', in which case it will be treated as
        !           343:  *   base 16.
        !           344:  * @return The numeric value of the string.  On overflow, errno is set
        !           345:  * to ERANGE.  On success, errno is set to 0.
        !           346:  */
        !           347: APR_DECLARE(apr_int64_t) apr_strtoi64(const char *buf, char **end, int base);
        !           348: 
        !           349: /**
        !           350:  * parse a base-10 numeric string into a 64-bit numeric value.
        !           351:  * Equivalent to apr_strtoi64(buf, (char**)NULL, 10).
        !           352:  * @param buf The string to parse
        !           353:  * @return The numeric value of the string.  On overflow, errno is set
        !           354:  * to ERANGE.  On success, errno is set to 0.
        !           355:  */
        !           356: APR_DECLARE(apr_int64_t) apr_atoi64(const char *buf);
        !           357: 
        !           358: /**
        !           359:  * Format a binary size (magnitiudes are 2^10 rather than 10^3) from an apr_off_t,
        !           360:  * as bytes, K, M, T, etc, to a four character compacted human readable string.
        !           361:  * @param size The size to format
        !           362:  * @param buf The 5 byte text buffer (counting the trailing null)
        !           363:  * @return The buf passed to apr_strfsize()
        !           364:  * @remark All negative sizes report '  - ', apr_strfsize only formats positive values.
        !           365:  */
        !           366: APR_DECLARE(char *) apr_strfsize(apr_off_t size, char *buf);
        !           367: 
        !           368: /** @} */
        !           369: 
        !           370: #ifdef __cplusplus
        !           371: }
        !           372: #endif
        !           373: 
        !           374: #endif  /* !APR_STRINGS_H */

E-mail: