github.com/krum110487/go-htaccess@v0.0.0-20240316004156-60641c8e7598/tests/data/apache_2_2_34/include/apr_xlate.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_XLATE_H 18 #define APR_XLATE_H 19 20 #include "apu.h" 21 #include "apr_pools.h" 22 #include "apr_errno.h" 23 24 #ifdef __cplusplus 25 extern "C" { 26 #endif /* __cplusplus */ 27 28 /** 29 * @file apr_xlate.h 30 * @brief APR I18N translation library 31 */ 32 33 /** 34 * @defgroup APR_XLATE I18N translation library 35 * @ingroup APR 36 * @{ 37 */ 38 /** Opaque translation buffer */ 39 typedef struct apr_xlate_t apr_xlate_t; 40 41 /** 42 * Set up for converting text from one charset to another. 43 * @param convset The handle to be filled in by this function 44 * @param topage The name of the target charset 45 * @param frompage The name of the source charset 46 * @param pool The pool to use 47 * @remark 48 * Specify APR_DEFAULT_CHARSET for one of the charset 49 * names to indicate the charset of the source code at 50 * compile time. This is useful if there are literal 51 * strings in the source code which must be translated 52 * according to the charset of the source code. 53 * APR_DEFAULT_CHARSET is not useful if the source code 54 * of the caller was not encoded in the same charset as 55 * APR at compile time. 56 * 57 * @remark 58 * Specify APR_LOCALE_CHARSET for one of the charset 59 * names to indicate the charset of the current locale. 60 * 61 * @remark 62 * Return APR_EINVAL if unable to procure a convset, or APR_ENOTIMPL 63 * if charset transcoding is not available in this instance of 64 * apr-util at all (i.e., APR_HAS_XLATE is undefined). 65 */ 66 APU_DECLARE(apr_status_t) apr_xlate_open(apr_xlate_t **convset, 67 const char *topage, 68 const char *frompage, 69 apr_pool_t *pool); 70 71 /** 72 * This is to indicate the charset of the sourcecode at compile time 73 * names to indicate the charset of the source code at 74 * compile time. This is useful if there are literal 75 * strings in the source code which must be translated 76 * according to the charset of the source code. 77 */ 78 #define APR_DEFAULT_CHARSET (const char *)0 79 /** 80 * To indicate charset names of the current locale 81 */ 82 #define APR_LOCALE_CHARSET (const char *)1 83 84 /** 85 * Find out whether or not the specified conversion is single-byte-only. 86 * @param convset The handle allocated by apr_xlate_open, specifying the 87 * parameters of conversion 88 * @param onoff Output: whether or not the conversion is single-byte-only 89 * @remark 90 * Return APR_ENOTIMPL if charset transcoding is not available 91 * in this instance of apr-util (i.e., APR_HAS_XLATE is undefined). 92 */ 93 APU_DECLARE(apr_status_t) apr_xlate_sb_get(apr_xlate_t *convset, int *onoff); 94 95 /** 96 * Convert a buffer of text from one codepage to another. 97 * @param convset The handle allocated by apr_xlate_open, specifying 98 * the parameters of conversion 99 * @param inbuf The address of the source buffer 100 * @param inbytes_left Input: the amount of input data to be translated 101 * Output: the amount of input data not yet translated 102 * @param outbuf The address of the destination buffer 103 * @param outbytes_left Input: the size of the output buffer 104 * Output: the amount of the output buffer not yet used 105 * @remark 106 * Returns APR_ENOTIMPL if charset transcoding is not available 107 * in this instance of apr-util (i.e., APR_HAS_XLATE is undefined). 108 * Returns APR_INCOMPLETE if the input buffer ends in an incomplete 109 * multi-byte character. 110 * 111 * To correctly terminate the output buffer for some multi-byte 112 * character set encodings, a final call must be made to this function 113 * after the complete input string has been converted, passing 114 * the inbuf and inbytes_left parameters as NULL. (Note that this 115 * mode only works from version 1.1.0 onwards) 116 */ 117 APU_DECLARE(apr_status_t) apr_xlate_conv_buffer(apr_xlate_t *convset, 118 const char *inbuf, 119 apr_size_t *inbytes_left, 120 char *outbuf, 121 apr_size_t *outbytes_left); 122 123 /* @see apr_file_io.h the comment in apr_file_io.h about this hack */ 124 #ifdef APR_NOT_DONE_YET 125 /** 126 * The purpose of apr_xlate_conv_char is to translate one character 127 * at a time. This needs to be written carefully so that it works 128 * with double-byte character sets. 129 * @param convset The handle allocated by apr_xlate_open, specifying the 130 * parameters of conversion 131 * @param inchar The character to convert 132 * @param outchar The converted character 133 */ 134 APU_DECLARE(apr_status_t) apr_xlate_conv_char(apr_xlate_t *convset, 135 char inchar, char outchar); 136 #endif 137 138 /** 139 * Convert a single-byte character from one charset to another. 140 * @param convset The handle allocated by apr_xlate_open, specifying the 141 * parameters of conversion 142 * @param inchar The single-byte character to convert. 143 * @warning This only works when converting between single-byte character sets. 144 * -1 will be returned if the conversion can't be performed. 145 */ 146 APU_DECLARE(apr_int32_t) apr_xlate_conv_byte(apr_xlate_t *convset, 147 unsigned char inchar); 148 149 /** 150 * Close a codepage translation handle. 151 * @param convset The codepage translation handle to close 152 * @remark 153 * Return APR_ENOTIMPL if charset transcoding is not available 154 * in this instance of apr-util (i.e., APR_HAS_XLATE is undefined). 155 */ 156 APU_DECLARE(apr_status_t) apr_xlate_close(apr_xlate_t *convset); 157 158 /** @} */ 159 #ifdef __cplusplus 160 } 161 #endif 162 163 #endif /* ! APR_XLATE_H */