1 /* 2 * UTF-8 string functions 3 * 4 * Copyright (C) 2008-2020, Joachim Metz <joachim.metz@gmail.com> 5 * 6 * Refer to AUTHORS for acknowledgements. 7 * 8 * This program is free software: you can redistribute it and/or modify 9 * it under the terms of the GNU Lesser General Public License as published by 10 * the Free Software Foundation, either version 3 of the License, or 11 * (at your option) any later version. 12 * 13 * This program is distributed in the hope that it will be useful, 14 * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 * GNU General Public License for more details. 17 * 18 * You should have received a copy of the GNU Lesser General Public License 19 * along with this program. If not, see <https://www.gnu.org/licenses/>. 20 */ 21 22 #if !defined( _LIBUNA_UTF8_STRING_H ) 23 #define _LIBUNA_UTF8_STRING_H 24 25 #include <common.h> 26 #include <types.h> 27 28 #include "libuna_extern.h" 29 #include "libuna_libcerror.h" 30 #include "libuna_types.h" 31 32 #if defined( __cplusplus ) 33 extern "C" { 34 #endif 35 36 LIBUNA_EXTERN \ 37 int libuna_utf8_string_size_from_byte_stream( 38 const uint8_t *byte_stream, 39 size_t byte_stream_size, 40 int codepage, 41 size_t *utf8_string_size, 42 libcerror_error_t **error ); 43 44 LIBUNA_EXTERN \ 45 int libuna_utf8_string_copy_from_byte_stream( 46 libuna_utf8_character_t *utf8_string, 47 size_t utf8_string_size, 48 const uint8_t *byte_stream, 49 size_t byte_stream_size, 50 int codepage, 51 libcerror_error_t **error ); 52 53 /* The functionality for libuna_utf8_string_copy_to_byte_stream is implemented by 54 * libuna_byte_stream_copy_from_utf8 55 */ 56 57 LIBUNA_EXTERN \ 58 int libuna_utf8_string_with_index_copy_from_byte_stream( 59 libuna_utf8_character_t *utf8_string, 60 size_t utf8_string_size, 61 size_t *utf8_string_index, 62 const uint8_t *byte_stream, 63 size_t byte_stream_size, 64 int codepage, 65 libcerror_error_t **error ); 66 67 LIBUNA_EXTERN \ 68 int libuna_utf8_string_compare_with_byte_stream( 69 const libuna_utf8_character_t *utf8_string, 70 size_t utf8_string_size, 71 const uint8_t *byte_stream, 72 size_t byte_stream_size, 73 int codepage, 74 libcerror_error_t **error ); 75 76 LIBUNA_EXTERN \ 77 int libuna_utf8_string_size_from_utf7_stream( 78 const uint8_t *utf7_stream, 79 size_t utf7_stream_size, 80 size_t *utf8_string_size, 81 libcerror_error_t **error ); 82 83 LIBUNA_EXTERN \ 84 int libuna_utf8_string_copy_from_utf7_stream( 85 libuna_utf8_character_t *utf8_string, 86 size_t utf8_string_size, 87 const uint8_t *utf7_stream, 88 size_t utf7_stream_size, 89 libcerror_error_t **error ); 90 91 /* The functionality for libuna_utf8_string_copy_to_utf7_stream is implemented by 92 * libuna_utf7_stream_copy_from_utf8 93 */ 94 95 LIBUNA_EXTERN \ 96 int libuna_utf8_string_with_index_copy_from_utf7_stream( 97 libuna_utf8_character_t *utf8_string, 98 size_t utf8_string_size, 99 size_t *utf8_string_index, 100 const uint8_t *utf7_stream, 101 size_t utf7_stream_size, 102 libcerror_error_t **error ); 103 104 LIBUNA_EXTERN \ 105 int libuna_utf8_string_compare_with_utf7_stream( 106 const libuna_utf8_character_t *utf8_string, 107 size_t utf8_string_size, 108 const uint8_t *utf7_stream, 109 size_t utf7_stream_size, 110 libcerror_error_t **error ); 111 112 LIBUNA_EXTERN \ 113 int libuna_utf8_string_size_from_utf8_stream( 114 const uint8_t *utf8_stream, 115 size_t utf8_stream_size, 116 size_t *utf8_string_size, 117 libcerror_error_t **error ); 118 119 LIBUNA_EXTERN \ 120 int libuna_utf8_string_copy_from_utf8_stream( 121 libuna_utf8_character_t *utf8_string, 122 size_t utf8_string_size, 123 const uint8_t *utf8_stream, 124 size_t utf8_stream_size, 125 libcerror_error_t **error ); 126 127 /* The functionality for libuna_utf8_string_copy_to_utf8_stream is implemented by 128 * libuna_utf8_stream_copy_from_utf8 129 */ 130 131 LIBUNA_EXTERN \ 132 int libuna_utf8_string_with_index_copy_from_utf8_stream( 133 libuna_utf8_character_t *utf8_string, 134 size_t utf8_string_size, 135 size_t *utf8_string_index, 136 const uint8_t *utf8_stream, 137 size_t utf8_stream_size, 138 libcerror_error_t **error ); 139 140 LIBUNA_EXTERN \ 141 int libuna_utf8_string_compare_with_utf8_stream( 142 const libuna_utf8_character_t *utf8_string, 143 size_t utf8_string_size, 144 const uint8_t *utf8_stream, 145 size_t utf8_stream_size, 146 libcerror_error_t **error ); 147 148 LIBUNA_EXTERN \ 149 int libuna_utf8_string_size_from_utf16( 150 const libuna_utf16_character_t *utf16_string, 151 size_t utf16_string_size, 152 size_t *utf8_string_size, 153 libcerror_error_t **error ); 154 155 LIBUNA_EXTERN \ 156 int libuna_utf8_string_copy_from_utf16( 157 libuna_utf8_character_t *utf8_string, 158 size_t utf8_string_size, 159 const libuna_utf16_character_t *utf16_string, 160 size_t utf16_string_size, 161 libcerror_error_t **error ); 162 163 /* The functionality for libuna_utf8_string_copy_to_utf16 is implemented by 164 * libuna_utf16_string_copy_from_utf8 165 */ 166 167 LIBUNA_EXTERN \ 168 int libuna_utf8_string_with_index_copy_from_utf16( 169 libuna_utf8_character_t *utf8_string, 170 size_t utf8_string_size, 171 size_t *utf8_string_index, 172 const libuna_utf16_character_t *utf16_string, 173 size_t utf16_string_size, 174 libcerror_error_t **error ); 175 176 LIBUNA_EXTERN \ 177 int libuna_utf8_string_compare_with_utf16( 178 const libuna_utf8_character_t *utf8_string, 179 size_t utf8_string_size, 180 const libuna_utf16_character_t *utf16_string, 181 size_t utf16_string_size, 182 libcerror_error_t **error ); 183 184 LIBUNA_EXTERN \ 185 int libuna_utf8_string_size_from_utf16_stream( 186 const uint8_t *utf16_stream, 187 size_t utf16_stream_size, 188 int byte_order, 189 size_t *utf8_string_size, 190 libcerror_error_t **error ); 191 192 LIBUNA_EXTERN \ 193 int libuna_utf8_string_copy_from_utf16_stream( 194 libuna_utf8_character_t *utf8_string, 195 size_t utf8_string_size, 196 const uint8_t *utf16_stream, 197 size_t utf16_stream_size, 198 int byte_order, 199 libcerror_error_t **error ); 200 201 /* The functionality for libuna_utf8_string_copy_to_utf16_stream is implemented by 202 * libuna_utf16_stream_copy_from_utf8 203 */ 204 205 LIBUNA_EXTERN \ 206 int libuna_utf8_string_with_index_copy_from_utf16_stream( 207 libuna_utf8_character_t *utf8_string, 208 size_t utf8_string_size, 209 size_t *utf8_string_index, 210 const uint8_t *utf16_stream, 211 size_t utf16_stream_size, 212 int byte_order, 213 libcerror_error_t **error ); 214 215 LIBUNA_EXTERN \ 216 int libuna_utf8_string_compare_with_utf16_stream( 217 const libuna_utf8_character_t *utf8_string, 218 size_t utf8_string_size, 219 const uint8_t *utf16_stream, 220 size_t utf16_stream_size, 221 int byte_order, 222 libcerror_error_t **error ); 223 224 LIBUNA_EXTERN \ 225 int libuna_utf8_string_size_from_utf32( 226 const libuna_utf32_character_t *utf32_string, 227 size_t utf32_string_size, 228 size_t *utf8_string_size, 229 libcerror_error_t **error ); 230 231 LIBUNA_EXTERN \ 232 int libuna_utf8_string_copy_from_utf32( 233 libuna_utf8_character_t *utf8_string, 234 size_t utf8_string_size, 235 const libuna_utf32_character_t *utf32_string, 236 size_t utf32_string_size, 237 libcerror_error_t **error ); 238 239 /* The functionality for libuna_utf8_string_copy_to_utf32 is implemented by 240 * libuna_utf32_string_copy_from_utf8 241 */ 242 243 LIBUNA_EXTERN \ 244 int libuna_utf8_string_with_index_copy_from_utf32( 245 libuna_utf8_character_t *utf8_string, 246 size_t utf8_string_size, 247 size_t *utf8_string_index, 248 const libuna_utf32_character_t *utf32_string, 249 size_t utf32_string_size, 250 libcerror_error_t **error ); 251 252 LIBUNA_EXTERN \ 253 int libuna_utf8_string_compare_with_utf32( 254 const libuna_utf8_character_t *utf8_string, 255 size_t utf8_string_size, 256 const libuna_utf32_character_t *utf32_string, 257 size_t utf32_string_size, 258 libcerror_error_t **error ); 259 260 LIBUNA_EXTERN \ 261 int libuna_utf8_string_size_from_utf32_stream( 262 const uint8_t *utf32_stream, 263 size_t utf32_stream_size, 264 int byte_order, 265 size_t *utf8_string_size, 266 libcerror_error_t **error ); 267 268 LIBUNA_EXTERN \ 269 int libuna_utf8_string_copy_from_utf32_stream( 270 libuna_utf8_character_t *utf8_string, 271 size_t utf8_string_size, 272 const uint8_t *utf32_stream, 273 size_t utf32_stream_size, 274 int byte_order, 275 libcerror_error_t **error ); 276 277 /* The functionality for libuna_utf8_string_copy_to_utf32_stream is implemented by 278 * libuna_utf32_stream_copy_from_utf8 279 */ 280 281 LIBUNA_EXTERN \ 282 int libuna_utf8_string_with_index_copy_from_utf32_stream( 283 libuna_utf8_character_t *utf8_string, 284 size_t utf8_string_size, 285 size_t *utf8_string_index, 286 const uint8_t *utf32_stream, 287 size_t utf32_stream_size, 288 int byte_order, 289 libcerror_error_t **error ); 290 291 LIBUNA_EXTERN \ 292 int libuna_utf8_string_compare_with_utf32_stream( 293 const libuna_utf8_character_t *utf8_string, 294 size_t utf8_string_size, 295 const uint8_t *utf32_stream, 296 size_t utf32_stream_size, 297 int byte_order, 298 libcerror_error_t **error ); 299 300 LIBUNA_EXTERN \ 301 int libuna_utf8_string_size_from_scsu_stream( 302 const uint8_t *scsu_stream, 303 size_t scsu_stream_size, 304 size_t *utf8_string_size, 305 libcerror_error_t **error ); 306 307 LIBUNA_EXTERN \ 308 int libuna_utf8_string_copy_from_scsu_stream( 309 libuna_utf8_character_t *utf8_string, 310 size_t utf8_string_size, 311 const uint8_t *scsu_stream, 312 size_t scsu_stream_size, 313 libcerror_error_t **error ); 314 315 LIBUNA_EXTERN \ 316 int libuna_utf8_string_with_index_copy_from_scsu_stream( 317 libuna_utf8_character_t *utf8_string, 318 size_t utf8_string_size, 319 size_t *utf8_string_index, 320 const uint8_t *scsu_stream, 321 size_t scsu_stream_size, 322 libcerror_error_t **error ); 323 324 #if defined( __cplusplus ) 325 } 326 #endif 327 328 #endif /* !defined( _LIBUNA_UTF8_STRING_H ) */ 329 330