123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963 |
- /*
- * Copyright (C) 2008-2011 Teluu Inc. (http://www.teluu.com)
- * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
- #ifndef __PJ_STRING_H__
- #define __PJ_STRING_H__
- /**
- * @file string.h
- * @brief PJLIB String Operations.
- */
- #include <pj/types.h>
- #include <pj/compat/string.h>
- PJ_BEGIN_DECL
- /**
- * @defgroup PJ_PSTR String Operations
- * @ingroup PJ_DS
- * @{
- * This module provides string manipulation API.
- *
- * \section pj_pstr_not_null_sec PJLIB String is NOT Null Terminated!
- *
- * That is the first information that developers need to know. Instead
- * of using normal C string, strings in PJLIB are represented as
- * pj_str_t structure below:
- *
- * <pre>
- * typedef struct pj_str_t
- * {
- * char *ptr;
- * pj_ssize_t slen;
- * } pj_str_t;
- * </pre>
- *
- * There are some advantages of using this approach:
- * - the string can point to arbitrary location in memory even
- * if the string in that location is not null terminated. This is
- * most usefull for text parsing, where the parsed text can just
- * point to the original text in the input. If we use C string,
- * then we will have to copy the text portion from the input
- * to a string variable.
- * - because the length of the string is known, string copy operation
- * can be made more efficient.
- *
- * Most of APIs in PJLIB that expect or return string will represent
- * the string as pj_str_t instead of normal C string.
- *
- * \section pj_pstr_examples_sec Examples
- *
- * For some examples, please see:
- * - String test: \src{pjlib/src/pjlib-test/string.c}
- */
- /**
- * Check if a string is truncated and if yes, put a suffix of ".."
- * to indicate the truncation.
- * This macro is used to check the result of pj_ansi_snprintf().
- *
- * @param ret The return value of pj_ansi_snprintf().
- * @param str The string.
- * @param len The length of the string buffer.
- */
- #define PJ_CHECK_TRUNC_STR(ret, str, len) \
- if ((int)(ret) >= (int)(len) || (ret) < 0) pj_ansi_strxcpy((str) + (len) - 3, "..", 3)
- /**
- * Create string initializer from a normal C string.
- *
- * @param str Null terminated string to be stored.
- *
- * @return pj_str_t.
- */
- PJ_IDECL(pj_str_t) pj_str(char *str);
- /**
- * Create constant string from normal C string.
- *
- * @param str The string to be initialized.
- * @param s Null terminated string.
- *
- * @return pj_str_t.
- */
- PJ_INLINE(const pj_str_t*) pj_cstr(pj_str_t *str, const char *s)
- {
- str->ptr = (char*)s;
- str->slen = s ? (pj_ssize_t)strlen(s) : 0;
- return str;
- }
- /**
- * Set the pointer and length to the specified value.
- *
- * @param str the string.
- * @param ptr pointer to set.
- * @param length length to set.
- *
- * @return the string.
- */
- PJ_INLINE(pj_str_t*) pj_strset( pj_str_t *str, char *ptr, pj_size_t length)
- {
- str->ptr = ptr;
- str->slen = (pj_ssize_t)length;
- return str;
- }
- /**
- * Set the pointer and length of the string to the source string, which
- * must be NULL terminated.
- *
- * @param str the string.
- * @param src pointer to set.
- *
- * @return the string.
- */
- PJ_INLINE(pj_str_t*) pj_strset2( pj_str_t *str, char *src)
- {
- str->ptr = src;
- str->slen = src ? (pj_ssize_t)strlen(src) : 0;
- return str;
- }
- /**
- * Set the pointer and the length of the string.
- *
- * @param str The target string.
- * @param begin The start of the string.
- * @param end The end of the string.
- *
- * @return the target string.
- */
- PJ_INLINE(pj_str_t*) pj_strset3( pj_str_t *str, char *begin, char *end )
- {
- str->ptr = begin;
- str->slen = (pj_ssize_t)(end-begin);
- return str;
- }
- /**
- * Assign string.
- *
- * @param dst The target string.
- * @param src The source string.
- *
- * @return the target string.
- */
- PJ_IDECL(pj_str_t*) pj_strassign( pj_str_t *dst, pj_str_t *src );
- /**
- * Copy string contents.
- *
- * @param dst The target string.
- * @param src The source string.
- *
- * @return the target string.
- */
- PJ_IDECL(pj_str_t*) pj_strcpy(pj_str_t *dst, const pj_str_t *src);
- /**
- * Copy string contents.
- *
- * @param dst The target string.
- * @param src The source string.
- *
- * @return the target string.
- */
- PJ_IDECL(pj_str_t*) pj_strcpy2(pj_str_t *dst, const char *src);
- /**
- * Copy source string to destination up to the specified max length.
- *
- * @param dst The target string.
- * @param src The source string.
- * @param max Maximum characters to copy.
- *
- * @return the target string.
- */
- PJ_IDECL(pj_str_t*) pj_strncpy(pj_str_t *dst, const pj_str_t *src,
- pj_ssize_t max);
- /**
- * Copy source string to destination up to the specified max length,
- * and NULL terminate the destination. If source string length is
- * greater than or equal to max, then max-1 will be copied.
- *
- * @param dst The target string.
- * @param src The source string.
- * @param max Maximum characters to copy.
- *
- * @return the target string.
- */
- PJ_IDECL(pj_str_t*) pj_strncpy_with_null(pj_str_t *dst, const pj_str_t *src,
- pj_ssize_t max);
- /**
- * Duplicate string.
- *
- * @param pool The pool.
- * @param dst The string result.
- * @param src The string to duplicate.
- *
- * @return the string result.
- */
- PJ_IDECL(pj_str_t*) pj_strdup(pj_pool_t *pool,
- pj_str_t *dst,
- const pj_str_t *src);
- /**
- * Duplicate string and NULL terminate the destination string.
- *
- * @param pool The pool.
- * @param dst The string result.
- * @param src The string to duplicate.
- *
- * @return The string result.
- */
- PJ_IDECL(pj_str_t*) pj_strdup_with_null(pj_pool_t *pool,
- pj_str_t *dst,
- const pj_str_t *src);
- /**
- * Duplicate string.
- *
- * @param pool The pool.
- * @param dst The string result.
- * @param src The string to duplicate.
- *
- * @return the string result.
- */
- PJ_IDECL(pj_str_t*) pj_strdup2(pj_pool_t *pool,
- pj_str_t *dst,
- const char *src);
- /**
- * Duplicate string and NULL terminate the destination string.
- *
- * @param pool The pool.
- * @param dst The string result.
- * @param src The string to duplicate.
- *
- * @return The string result.
- */
- PJ_IDECL(pj_str_t*) pj_strdup2_with_null(pj_pool_t *pool,
- pj_str_t *dst,
- const char *src);
- /**
- * Duplicate string.
- *
- * @param pool The pool.
- * @param src The string to duplicate.
- *
- * @return the string result.
- */
- PJ_IDECL(pj_str_t) pj_strdup3(pj_pool_t *pool, const char *src);
- /**
- * Return the length of the string.
- *
- * @param str The string.
- *
- * @return the length of the string.
- */
- PJ_INLINE(pj_size_t) pj_strlen( const pj_str_t *str )
- {
- return str->slen;
- }
- /**
- * Return the pointer to the string data.
- *
- * @param str The string.
- *
- * @return the pointer to the string buffer.
- */
- PJ_INLINE(const char*) pj_strbuf( const pj_str_t *str )
- {
- return str->ptr;
- }
- /**
- * Compare strings.
- *
- * @param str1 The string to compare.
- * @param str2 The string to compare.
- *
- * @return
- * - < 0 if str1 is less than str2
- * - 0 if str1 is identical to str2
- * - > 0 if str1 is greater than str2
- */
- PJ_IDECL(int) pj_strcmp( const pj_str_t *str1, const pj_str_t *str2);
- /**
- * Compare strings.
- *
- * @param str1 The string to compare.
- * @param str2 The string to compare.
- *
- * @return
- * - < 0 if str1 is less than str2
- * - 0 if str1 is identical to str2
- * - > 0 if str1 is greater than str2
- */
- PJ_IDECL(int) pj_strcmp2( const pj_str_t *str1, const char *str2 );
- /**
- * Compare strings.
- *
- * @param str1 The string to compare.
- * @param str2 The string to compare.
- * @param len The maximum number of characters to compare.
- *
- * @return
- * - < 0 if str1 is less than str2
- * - 0 if str1 is identical to str2
- * - > 0 if str1 is greater than str2
- */
- PJ_IDECL(int) pj_strncmp( const pj_str_t *str1, const pj_str_t *str2,
- pj_size_t len);
- /**
- * Compare strings.
- *
- * @param str1 The string to compare.
- * @param str2 The string to compare.
- * @param len The maximum number of characters to compare.
- *
- * @return
- * - < 0 if str1 is less than str2
- * - 0 if str1 is identical to str2
- * - > 0 if str1 is greater than str2
- */
- PJ_IDECL(int) pj_strncmp2( const pj_str_t *str1, const char *str2,
- pj_size_t len);
- /**
- * Perform case-insensitive comparison to the strings.
- *
- * @param str1 The string to compare.
- * @param str2 The string to compare.
- *
- * @return
- * - < 0 if str1 is less than str2
- * - 0 if str1 is equal to str2
- * - > 0 if str1 is greater than str2
- */
- PJ_IDECL(int) pj_stricmp(const pj_str_t *str1, const pj_str_t *str2);
- /**
- * Perform lowercase comparison to the strings which consists of only
- * alnum characters. More over, it will only return non-zero if both
- * strings are not equal, not the usual negative or positive value.
- *
- * If non-alnum inputs are given, then the function may mistakenly
- * treat two strings as equal.
- *
- * @param str1 The string to compare.
- * @param str2 The string to compare.
- * @param len The length to compare.
- *
- * @return
- * - 0 if str1 is equal to str2
- * - (-1) if not equal.
- */
- #if defined(PJ_HAS_STRICMP_ALNUM) && PJ_HAS_STRICMP_ALNUM!=0
- PJ_IDECL(int) strnicmp_alnum(const char *str1, const char *str2,
- int len);
- #else
- #define strnicmp_alnum pj_ansi_strnicmp
- #endif
- /**
- * Perform lowercase comparison to the strings which consists of only
- * alnum characters. More over, it will only return non-zero if both
- * strings are not equal, not the usual negative or positive value.
- *
- * If non-alnum inputs are given, then the function may mistakenly
- * treat two strings as equal.
- *
- * @param str1 The string to compare.
- * @param str2 The string to compare.
- *
- * @return
- * - 0 if str1 is equal to str2
- * - (-1) if not equal.
- */
- #if defined(PJ_HAS_STRICMP_ALNUM) && PJ_HAS_STRICMP_ALNUM!=0
- PJ_IDECL(int) pj_stricmp_alnum(const pj_str_t *str1, const pj_str_t *str2);
- #else
- #define pj_stricmp_alnum pj_stricmp
- #endif
- /**
- * Perform case-insensitive comparison to the strings.
- *
- * @param str1 The string to compare.
- * @param str2 The string to compare.
- *
- * @return
- * - < 0 if str1 is less than str2
- * - 0 if str1 is identical to str2
- * - > 0 if str1 is greater than str2
- */
- PJ_IDECL(int) pj_stricmp2( const pj_str_t *str1, const char *str2);
- /**
- * Perform case-insensitive comparison to the strings.
- *
- * @param str1 The string to compare.
- * @param str2 The string to compare.
- * @param len The maximum number of characters to compare.
- *
- * @return
- * - < 0 if str1 is less than str2
- * - 0 if str1 is identical to str2
- * - > 0 if str1 is greater than str2
- */
- PJ_IDECL(int) pj_strnicmp( const pj_str_t *str1, const pj_str_t *str2,
- pj_size_t len);
- /**
- * Perform case-insensitive comparison to the strings.
- *
- * @param str1 The string to compare.
- * @param str2 The string to compare.
- * @param len The maximum number of characters to compare.
- *
- * @return
- * - < 0 if str1 is less than str2
- * - 0 if str1 is identical to str2
- * - > 0 if str1 is greater than str2
- */
- PJ_IDECL(int) pj_strnicmp2( const pj_str_t *str1, const char *str2,
- pj_size_t len);
- /**
- * Concatenate strings.
- *
- * @param dst The destination string.
- * @param src The source string.
- */
- PJ_IDECL(void) pj_strcat(pj_str_t *dst, const pj_str_t *src);
- /**
- * Concatenate strings.
- *
- * @param dst The destination string.
- * @param src The source string.
- */
- PJ_IDECL(void) pj_strcat2(pj_str_t *dst, const char *src);
- /**
- * Finds a character in a string.
- *
- * @param str The string.
- * @param chr The character to find.
- *
- * @return the pointer to first character found, or NULL.
- */
- PJ_INLINE(char*) pj_strchr( const pj_str_t *str, int chr)
- {
- if (str->slen == 0)
- return NULL;
- return (char*) memchr((char*)str->ptr, chr, str->slen);
- }
- /**
- * Find the first index of character, in a string, that does not belong to a
- * set of characters.
- *
- * @param str The string.
- * @param set_char The string containing the set of characters.
- *
- * @return the index of the first character in the str that doesn't belong to
- * set_char. If str starts with a character not in set_char, return 0.
- */
- PJ_DECL(pj_ssize_t) pj_strspn(const pj_str_t *str, const pj_str_t *set_char);
- /**
- * Find the first index of character, in a string, that does not belong to a
- * set of characters.
- *
- * @param str The string.
- * @param set_char The string containing the set of characters.
- *
- * @return the index of the first character in the str that doesn't belong to
- * set_char. If str starts with a character not in set_char, return 0.
- */
- PJ_DECL(pj_ssize_t) pj_strspn2(const pj_str_t *str, const char *set_char);
- /**
- * Find the first index of character, in a string, that belong to a set of
- * characters.
- *
- * @param str The string.
- * @param set_char The string containing the set of characters.
- *
- * @return the index of the first character in the str that belong to
- * set_char. If no match is found, return the length of str.
- */
- PJ_DECL(pj_ssize_t) pj_strcspn(const pj_str_t *str, const pj_str_t *set_char);
- /**
- * Find the first index of character, in a string, that belong to a set of
- * characters.
- *
- * @param str The string.
- * @param set_char The string containing the set of characters.
- *
- * @return the index of the first character in the str that belong to
- * set_char. If no match is found, return the length of str.
- */
- PJ_DECL(pj_ssize_t) pj_strcspn2(const pj_str_t *str, const char *set_char);
- /**
- * Find tokens from a string using the delimiter.
- *
- * @param str The string.
- * @param delim The string containing the delimiter. It might contain
- * multiple character treated as unique set. If same character
- * was found on the set, it will be skipped.
- * @param tok The string containing the token.
- * @param start_idx The search will start from this index.
- *
- * @return the index of token from the str, or the length of the str
- * if the token is not found.
- */
- PJ_DECL(pj_ssize_t) pj_strtok(const pj_str_t *str, const pj_str_t *delim,
- pj_str_t *tok, pj_size_t start_idx);
- /**
- * Find tokens from a string using the delimiter.
- *
- * @param str The string.
- * @param delim The string containing the delimiter. It might contain
- * multiple character treated as unique set. If same character
- * was found on the set, it will be skipped.
- * @param tok The string containing the token.
- * @param start_idx The search will start from this index.
- *
- * @return the index of token from the str, or the length of the str
- * if the token is not found.
- */
- PJ_DECL(pj_ssize_t) pj_strtok2(const pj_str_t *str, const char *delim,
- pj_str_t *tok, pj_size_t start_idx);
- /**
- * Find the occurence of a substring substr in string str.
- *
- * @param str The string to search.
- * @param substr The string to search fo.
- *
- * @return the pointer to the position of substr in str, or NULL. Note
- * that if str is not NULL terminated, the returned pointer
- * is pointing to non-NULL terminated string.
- */
- PJ_DECL(char*) pj_strstr(const pj_str_t *str, const pj_str_t *substr);
- /**
- * Performs substring lookup like pj_strstr() but ignores the case of
- * both strings.
- *
- * @param str The string to search.
- * @param substr The string to search fo.
- *
- * @return the pointer to the position of substr in str, or NULL. Note
- * that if str is not NULL terminated, the returned pointer
- * is pointing to non-NULL terminated string.
- */
- PJ_DECL(char*) pj_stristr(const pj_str_t *str, const pj_str_t *substr);
- /**
- * Remove (trim) leading whitespaces from the string.
- *
- * @param str The string.
- *
- * @return the string.
- */
- PJ_DECL(pj_str_t*) pj_strltrim( pj_str_t *str );
- /**
- * Remove (trim) the trailing whitespaces from the string.
- *
- * @param str The string.
- *
- * @return the string.
- */
- PJ_DECL(pj_str_t*) pj_strrtrim( pj_str_t *str );
- /**
- * Remove (trim) leading and trailing whitespaces from the string.
- *
- * @param str The string.
- *
- * @return the string.
- */
- PJ_IDECL(pj_str_t*) pj_strtrim( pj_str_t *str );
- /**
- * Initialize the buffer with some random string. Note that the
- * generated string is not NULL terminated.
- *
- * @param str the string to store the result.
- * @param length the length of the random string to generate.
- *
- * @return the string.
- */
- PJ_DECL(char*) pj_create_random_string(char *str, pj_size_t length);
- /**
- * Convert string to signed integer. The conversion will stop as
- * soon as non-digit character is found or all the characters have
- * been processed.
- *
- * @param str the string.
- *
- * @return the integer.
- */
- PJ_DECL(long) pj_strtol(const pj_str_t *str);
- /**
- * Convert string to signed long integer. The conversion will stop as
- * soon as non-digit character is found or all the characters have
- * been processed.
- *
- * @param str the string.
- * @param value Pointer to a long to receive the value.
- *
- * @return PJ_SUCCESS if successful. Otherwise:
- * PJ_ETOOSMALL if the value was an impossibly long negative number.
- * In this case *value will be set to LONG_MIN.
- * \n
- * PJ_ETOOBIG if the value was an impossibly long positive number.
- * In this case, *value will be set to LONG_MAX.
- * \n
- * PJ_EINVAL if the input string was NULL, the value pointer was NULL
- * or the input string could not be parsed at all such as starting with
- * a character other than a '+', '-' or not in the '0' - '9' range.
- * In this case, *value will be left untouched.
- */
- PJ_DECL(pj_status_t) pj_strtol2(const pj_str_t *str, long *value);
- /**
- * Convert string to unsigned integer. The conversion will stop as
- * soon as non-digit character is found or all the characters have
- * been processed.
- *
- * @param str the string.
- *
- * @return the unsigned integer.
- */
- PJ_DECL(unsigned long) pj_strtoul(const pj_str_t *str);
- /**
- * Convert strings to an unsigned long-integer value.
- * This function stops reading the string input either when the number
- * of characters has exceeded the length of the input or it has read
- * the first character it cannot recognize as part of a number, that is
- * a character greater than or equal to base.
- *
- * @param str The input string.
- * @param endptr Optional pointer to receive the remainder/unparsed
- * portion of the input.
- * @param base Number base to use.
- *
- * @return the unsigned integer number.
- */
- PJ_DECL(unsigned long) pj_strtoul2(const pj_str_t *str, pj_str_t *endptr,
- unsigned base);
- /**
- * Convert string to unsigned long integer. The conversion will stop as
- * soon as non-digit character is found or all the characters have
- * been processed.
- *
- * @param str The input string.
- * @param value Pointer to an unsigned long to receive the value.
- * @param base Number base to use.
- *
- * @return PJ_SUCCESS if successful. Otherwise:
- * PJ_ETOOBIG if the value was an impossibly long positive number.
- * In this case, *value will be set to ULONG_MAX.
- * \n
- * PJ_EINVAL if the input string was NULL, the value pointer was NULL
- * or the input string could not be parsed at all such as starting
- * with a character outside the base character range. In this case,
- * *value will be left untouched.
- */
- PJ_DECL(pj_status_t) pj_strtoul3(const pj_str_t *str, unsigned long *value,
- unsigned base);
- /**
- * Convert string to generic unsigned integer. The conversion will stop as
- * soon as non-digit character is found or all the characters have
- * been processed.
- *
- * @param str The input string.
- * @param value Pointer to an unsigned integer to receive the value.
- * The value will be a 64 bit unsigned integer if the system
- * supports it, otherwise a 32 bit unsigned integer.
- * @param base Number base to use.
- *
- * @return PJ_SUCCESS if successful. Otherwise:
- * PJ_ETOOBIG if the value was an impossibly long positive number.
- * In this case, *value will be set to ULLONG_MAX (for 64 bit) or
- * ULONG_MAX (for 32 bit).
- * \n
- * PJ_EINVAL if the input string was NULL, the value pointer was NULL
- * or the input string could not be parsed at all such as starting
- * with a character outside the base character range. In this case,
- * *value will be left untouched.
- */
- PJ_DECL(pj_status_t) pj_strtoul4(const pj_str_t *str, pj_uint_t *value,
- unsigned base);
- /**
- * Convert string to float.
- *
- * @param str the string.
- *
- * @return the value.
- */
- PJ_DECL(float) pj_strtof(const pj_str_t *str);
- /**
- * Utility to convert unsigned integer to string. Note that the
- * string will be NULL terminated.
- *
- * @param val the unsigned integer value.
- * @param buf the buffer
- *
- * @return the number of characters written
- */
- PJ_DECL(int) pj_utoa(unsigned long val, char *buf);
- /**
- * Utility to convert generic unsigned integer to string. Note that the
- * string will be NULL terminated.
- *
- * This function will take 64 bit unsigned integer if the system has one,
- * otherwise it takes 32 bit unsigned integer.
- *
- * @param val the unsigned integer value.
- * @param buf the buffer
- *
- * @return the number of characters written
- */
- PJ_DECL(int) pj_utoa2(pj_uint_t val, char *buf);
- /**
- * Convert unsigned integer to string with minimum digits. Note that the
- * string will be NULL terminated.
- *
- * @param val The unsigned integer value.
- * @param buf The buffer.
- * @param min_dig Minimum digits to be printed, or zero to specify no
- * minimum digit.
- * @param pad The padding character to be put in front of the string
- * when the digits is less than minimum.
- *
- * @return the number of characters written.
- */
- PJ_DECL(int) pj_utoa_pad( unsigned long val, char *buf, int min_dig, int pad);
- /**
- * Convert generic unsigned integer to string with minimum digits. Note that
- * the string will be NULL terminated.
- *
- * This function will take 64 bit unsigned integer if the system has one,
- * otherwise it takes 32 bit unsigned integer.
- *
- * @param val The unsigned integer value.
- * @param buf The buffer.
- * @param min_dig Minimum digits to be printed, or zero to specify no
- * minimum digit.
- * @param pad The padding character to be put in front of the string
- * when the digits is less than minimum.
- *
- * @return the number of characters written.
- */
- PJ_DECL(int) pj_utoa_pad2( pj_uint_t val, char *buf, int min_dig, int pad);
- /**
- * Fill the memory location with zero.
- *
- * @param dst The destination buffer.
- * @param size The number of bytes.
- */
- PJ_INLINE(void) pj_bzero(void *dst, pj_size_t size)
- {
- #if defined(PJ_HAS_BZERO) && PJ_HAS_BZERO!=0
- bzero(dst, size);
- #else
- memset(dst, 0, size);
- #endif
- }
- /**
- * Fill the memory location with value.
- *
- * @param dst The destination buffer.
- * @param c Character to set.
- * @param size The number of characters.
- *
- * @return the value of dst.
- */
- PJ_INLINE(void*) pj_memset(void *dst, int c, pj_size_t size)
- {
- return memset(dst, c, size);
- }
- /**
- * Copy buffer.
- *
- * @param dst The destination buffer.
- * @param src The source buffer.
- * @param size The size to copy.
- *
- * @return the destination buffer.
- */
- PJ_INLINE(void*) pj_memcpy(void *dst, const void *src, pj_size_t size)
- {
- return memcpy(dst, src, size);
- }
- /**
- * Move memory.
- *
- * @param dst The destination buffer.
- * @param src The source buffer.
- * @param size The size to copy.
- *
- * @return the destination buffer.
- */
- PJ_INLINE(void*) pj_memmove(void *dst, const void *src, pj_size_t size)
- {
- return memmove(dst, src, size);
- }
- /**
- * Compare buffers.
- *
- * @param buf1 The first buffer.
- * @param buf2 The second buffer.
- * @param size The size to compare.
- *
- * @return negative, zero, or positive value.
- */
- PJ_INLINE(int) pj_memcmp(const void *buf1, const void *buf2, pj_size_t size)
- {
- return memcmp(buf1, buf2, size);
- }
- /**
- * Find character in the buffer.
- *
- * @param buf The buffer.
- * @param c The character to find.
- * @param size The size to check.
- *
- * @return the pointer to location where the character is found, or NULL if
- * not found.
- */
- PJ_INLINE(void*) pj_memchr(const void *buf, int c, pj_size_t size)
- {
- return (void*)memchr((void*)buf, c, size);
- }
- /**
- * Copy the string, or as much of it as fits, into the dest buffer.
- * Regardless of whether all characters were copied, the destination
- * buffer will be null terminated, unless dst_size is zero which in
- * this case nothing will be written to dst and the function will
- * return -PJ_ETOOBIG.
- *
- * @param dst The destination string.
- * @param src The source string.
- * @param dst_size The full size of the destination string buffer.
- *
- * @return The number of characters copied (not including the trailing NUL) or
- * -PJ_ETOOBIG if the destination buffer wasn't big enough,
- * -PJ_EINVAL if the dst or src is NULL.
- */
- PJ_DECL(int) pj_ansi_strxcpy(char *dst, const char *src, pj_size_t dst_size);
- /**
- * Same as pj_ansi_strxcpy() but takes pj_str_t as the source.
- * If src contains null character, copying will stop at the first null
- * character in src.
- *
- * @param dst The destination string.
- * @param src The source string.
- * @param dst_size The full size of the destination string buffer.
- *
- * @return The number of characters copied (not including the trailing NUL) or
- * -PJ_ETOOBIG if the destination buffer wasn't big enough,
- * -PJ_EINVAL if the dst or src is NULL.
- */
- PJ_DECL(int) pj_ansi_strxcpy2(char *dst, const pj_str_t *src,
- pj_size_t dst_size);
- /**
- * Concatenate src, or as much of it as fits, into the dest buffer.
- * Regardless of whether all characters were copied, the destination
- * buffer will be null terminated, unless dst_size is zero which in
- * this case nothing will be written to dst and the function will
- * return -PJ_ETOOBIG.
- *
- * @param dst The destination string.
- * @param src The source string.
- * @param dst_size The full size of the destination string buffer.
- *
- * @return Final length of dst string (not including the trailing NUL) or
- * -PJ_ETOOBIG if the destination buffer wasn't big enough,
- * -PJ_EINVAL if the dst or src is NULL.
- */
- PJ_DECL(int) pj_ansi_strxcat(char *dst, const char *src, pj_size_t dst_size);
- /**
- * @}
- */
- #if PJ_FUNCTIONS_ARE_INLINED
- # include <pj/string_i.h>
- #endif
- PJ_END_DECL
- #endif /* __PJ_STRING_H__ */
|