1 // 2016 and later: Unicode, Inc. and others. 2 // License & terms of use: http://www.unicode.org/copyright.html 3 /* 4 ****************************************************************************** 5 * 6 * Copyright (C) 1997-2012, International Business Machines 7 * Corporation and others. All Rights Reserved. 8 * 9 ****************************************************************************** 10 * 11 * File CSTRING.H 12 * 13 * Contains CString interface 14 * 15 * @author Helena Shih 16 * 17 * Modification History: 18 * 19 * Date Name Description 20 * 6/17/98 hshih Created. 21 * 05/03/99 stephen Changed from functions to macros. 22 * 06/14/99 stephen Added icu_strncat, icu_strncmp, icu_tolower 23 * 24 ****************************************************************************** 25 */ 26 27 #ifndef CSTRING_H 28 #define CSTRING_H 1 29 30 #include "unicode/utypes.h" 31 #include "cmemory.h" 32 #include <string.h> 33 #include <stdlib.h> 34 #include <ctype.h> 35 36 #define uprv_strcpy(dst, src) U_STANDARD_CPP_NAMESPACE strcpy(dst, src) 37 #define uprv_strlen(str) U_STANDARD_CPP_NAMESPACE strlen(str) 38 #define uprv_strcmp(s1, s2) U_STANDARD_CPP_NAMESPACE strcmp(s1, s2) 39 #define uprv_strcat(dst, src) U_STANDARD_CPP_NAMESPACE strcat(dst, src) 40 #define uprv_strchr(s, c) U_STANDARD_CPP_NAMESPACE strchr(s, c) 41 #define uprv_strstr(s, c) U_STANDARD_CPP_NAMESPACE strstr(s, c) 42 #define uprv_strrchr(s, c) U_STANDARD_CPP_NAMESPACE strrchr(s, c) 43 44 #if U_DEBUG 45 46 #define uprv_strncpy(dst, src, size) ( \ 47 uprv_checkValidMemory(src, 1), \ 48 U_STANDARD_CPP_NAMESPACE strncpy(dst, src, size)) 49 #define uprv_strncmp(s1, s2, n) ( \ 50 uprv_checkValidMemory(s1, 1), \ 51 uprv_checkValidMemory(s2, 1), \ 52 U_STANDARD_CPP_NAMESPACE strncmp(s1, s2, n)) 53 #define uprv_strncat(dst, src, n) ( \ 54 uprv_checkValidMemory(src, 1), \ 55 U_STANDARD_CPP_NAMESPACE strncat(dst, src, n)) 56 57 #else 58 59 #define uprv_strncpy(dst, src, size) U_STANDARD_CPP_NAMESPACE strncpy(dst, src, size) 60 #define uprv_strncmp(s1, s2, n) U_STANDARD_CPP_NAMESPACE strncmp(s1, s2, n) 61 #define uprv_strncat(dst, src, n) U_STANDARD_CPP_NAMESPACE strncat(dst, src, n) 62 63 #endif /* U_DEBUG */ 64 65 /** 66 * Is c an ASCII-repertoire letter a-z or A-Z? 67 * Note: The implementation is specific to whether ICU is compiled for 68 * an ASCII-based or EBCDIC-based machine. There just does not seem to be a better name for this. 69 */ 70 U_CAPI UBool U_EXPORT2 71 uprv_isASCIILetter(char c); 72 73 U_CAPI char U_EXPORT2 74 uprv_toupper(char c); 75 76 77 U_CAPI char U_EXPORT2 78 uprv_asciitolower(char c); 79 80 U_CAPI char U_EXPORT2 81 uprv_ebcdictolower(char c); 82 83 #if U_CHARSET_FAMILY==U_ASCII_FAMILY 84 # define uprv_tolower uprv_asciitolower 85 #elif U_CHARSET_FAMILY==U_EBCDIC_FAMILY 86 # define uprv_tolower uprv_ebcdictolower 87 #else 88 # error U_CHARSET_FAMILY is not valid 89 #endif 90 91 #define uprv_strtod(source, end) U_STANDARD_CPP_NAMESPACE strtod(source, end) 92 #define uprv_strtoul(str, end, base) U_STANDARD_CPP_NAMESPACE strtoul(str, end, base) 93 #define uprv_strtol(str, end, base) U_STANDARD_CPP_NAMESPACE strtol(str, end, base) 94 95 /* Conversion from a digit to the character with radix base from 2-19 */ 96 /* May need to use U_UPPER_ORDINAL*/ 97 #define T_CString_itosOffset(a) ((a)<=9?('0'+(a)):('A'+(a)-10)) 98 99 U_CAPI char* U_EXPORT2 100 uprv_strdup(const char *src); 101 102 /** 103 * uprv_malloc n+1 bytes, and copy n bytes from src into the new string. 104 * Terminate with a null at offset n. If n is -1, works like uprv_strdup 105 * @param src 106 * @param n length of the input string, not including null. 107 * @return new string (owned by caller, use uprv_free to free). 108 * @internal 109 */ 110 U_CAPI char* U_EXPORT2 111 uprv_strndup(const char *src, int32_t n); 112 113 U_CAPI char* U_EXPORT2 114 T_CString_toLowerCase(char* str); 115 116 U_CAPI char* U_EXPORT2 117 T_CString_toUpperCase(char* str); 118 119 U_CAPI int32_t U_EXPORT2 120 T_CString_integerToString(char *buffer, int32_t n, int32_t radix); 121 122 U_CAPI int32_t U_EXPORT2 123 T_CString_int64ToString(char *buffer, int64_t n, uint32_t radix); 124 125 U_CAPI int32_t U_EXPORT2 126 T_CString_stringToInteger(const char *integerString, int32_t radix); 127 128 /** 129 * Case-insensitive, language-independent string comparison 130 * limited to the ASCII character repertoire. 131 */ 132 U_CAPI int U_EXPORT2 133 uprv_stricmp(const char *str1, const char *str2); 134 135 /** 136 * Case-insensitive, language-independent string comparison 137 * limited to the ASCII character repertoire. 138 */ 139 U_CAPI int U_EXPORT2 140 uprv_strnicmp(const char *str1, const char *str2, uint32_t n); 141 142 #endif /* ! CSTRING_H */ 143