1 /* 2 * UTF-16 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_UTF16_STRING_H ) 23 #define _LIBUNA_UTF16_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_utf16_string_size_from_byte_stream( 38 const uint8_t *byte_stream, 39 size_t byte_stream_size, 40 int codepage, 41 size_t *utf16_string_size, 42 libcerror_error_t **error ); 43 44 LIBUNA_EXTERN \ 45 int libuna_utf16_string_copy_from_byte_stream( 46 libuna_utf16_character_t *utf16_string, 47 size_t utf16_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_utf16_string_copy_to_byte_stream is implemented by 54 * libuna_byte_stream_copy_from_utf16 55 */ 56 57 LIBUNA_EXTERN \ 58 int libuna_utf16_string_with_index_copy_from_byte_stream( 59 libuna_utf16_character_t *utf16_string, 60 size_t utf16_string_size, 61 size_t *utf16_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_utf16_string_compare_with_byte_stream( 69 const libuna_utf16_character_t *utf16_string, 70 size_t utf16_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_utf16_string_size_from_utf7_stream( 78 const uint8_t *utf7_stream, 79 size_t utf7_stream_size, 80 size_t *utf16_string_size, 81 libcerror_error_t **error ); 82 83 LIBUNA_EXTERN \ 84 int libuna_utf16_string_copy_from_utf7_stream( 85 libuna_utf16_character_t *utf16_string, 86 size_t utf16_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_utf16_string_copy_to_utf7_stream is implemented by 92 * libuna_utf7_stream_copy_from_utf16 93 */ 94 95 LIBUNA_EXTERN \ 96 int libuna_utf16_string_with_index_copy_from_utf7_stream( 97 libuna_utf16_character_t *utf16_string, 98 size_t utf16_string_size, 99 size_t *utf16_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_utf16_string_compare_with_utf7_stream( 106 const libuna_utf16_character_t *utf16_string, 107 size_t utf16_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_utf16_string_size_from_utf8( 114 const libuna_utf8_character_t *utf8_string, 115 size_t utf8_string_size, 116 size_t *utf16_string_size, 117 libcerror_error_t **error ); 118 119 LIBUNA_EXTERN \ 120 int libuna_utf16_string_copy_from_utf8( 121 libuna_utf16_character_t *utf16_string, 122 size_t utf16_string_size, 123 const libuna_utf8_character_t *utf8_string, 124 size_t utf8_string_size, 125 libcerror_error_t **error ); 126 127 /* The functionality for libuna_utf16_string_copy_to_utf8 is implemented by 128 * libuna_utf8_string_copy_from_utf16 129 */ 130 131 LIBUNA_EXTERN \ 132 int libuna_utf16_string_with_index_copy_from_utf8( 133 libuna_utf16_character_t *utf16_string, 134 size_t utf16_string_size, 135 size_t *utf16_string_index, 136 const libuna_utf8_character_t *utf8_string, 137 size_t utf8_string_size, 138 libcerror_error_t **error ); 139 140 /* The functionality for libuna_utf16_string_compare_with_utf8 is implemented by 141 * libuna_utf8_string_compare_with_utf16 142 */ 143 144 LIBUNA_EXTERN \ 145 int libuna_utf16_string_size_from_utf8_stream( 146 const uint8_t *utf16_stream, 147 size_t utf16_stream_size, 148 size_t *utf16_string_size, 149 libcerror_error_t **error ); 150 151 LIBUNA_EXTERN \ 152 int libuna_utf16_string_copy_from_utf8_stream( 153 libuna_utf16_character_t *utf16_string, 154 size_t utf16_string_size, 155 const uint8_t *utf8_stream, 156 size_t utf8_stream_size, 157 libcerror_error_t **error ); 158 159 /* The functionality for libuna_utf16_string_copy_to_utf8_stream is implemented by 160 * libuna_utf8_stream_copy_from_utf16 161 */ 162 163 LIBUNA_EXTERN \ 164 int libuna_utf16_string_with_index_copy_from_utf8_stream( 165 libuna_utf16_character_t *utf16_string, 166 size_t utf16_string_size, 167 size_t *utf16_string_index, 168 const uint8_t *utf8_stream, 169 size_t utf8_stream_size, 170 libcerror_error_t **error ); 171 172 LIBUNA_EXTERN \ 173 int libuna_utf16_string_compare_with_utf8_stream( 174 const libuna_utf16_character_t *utf16_string, 175 size_t utf16_string_size, 176 const uint8_t *utf8_stream, 177 size_t utf8_stream_size, 178 libcerror_error_t **error ); 179 180 LIBUNA_EXTERN \ 181 int libuna_utf16_string_size_from_utf16_stream( 182 const uint8_t *utf16_stream, 183 size_t utf16_stream_size, 184 int byte_order, 185 size_t *utf16_string_size, 186 libcerror_error_t **error ); 187 188 LIBUNA_EXTERN \ 189 int libuna_utf16_string_copy_from_utf16_stream( 190 libuna_utf16_character_t *utf16_string, 191 size_t utf16_string_size, 192 const uint8_t *utf16_stream, 193 size_t utf16_stream_size, 194 int byte_order, 195 libcerror_error_t **error ); 196 197 /* The functionality for libuna_utf16_string_copy_to_utf16_stream is implemented by 198 * libuna_utf16_stream_copy_from_utf16 199 */ 200 201 LIBUNA_EXTERN \ 202 int libuna_utf16_string_with_index_copy_from_utf16_stream( 203 libuna_utf16_character_t *utf16_string, 204 size_t utf16_string_size, 205 size_t *utf16_string_index, 206 const uint8_t *utf16_stream, 207 size_t utf16_stream_size, 208 int byte_order, 209 libcerror_error_t **error ); 210 211 LIBUNA_EXTERN \ 212 int libuna_utf16_string_compare_with_utf16_stream( 213 const libuna_utf16_character_t *utf16_string, 214 size_t utf16_string_size, 215 const uint8_t *utf16_stream, 216 size_t utf16_stream_size, 217 int byte_order, 218 libcerror_error_t **error ); 219 220 LIBUNA_EXTERN \ 221 int libuna_utf16_string_size_from_utf32( 222 const libuna_utf32_character_t *utf32_string, 223 size_t utf32_string_size, 224 size_t *utf16_string_size, 225 libcerror_error_t **error ); 226 227 LIBUNA_EXTERN \ 228 int libuna_utf16_string_copy_from_utf32( 229 libuna_utf16_character_t *utf16_string, 230 size_t utf16_string_size, 231 const libuna_utf32_character_t *utf32_string, 232 size_t utf32_string_size, 233 libcerror_error_t **error ); 234 235 /* The functionality for libuna_utf16_string_copy_to_utf32 is implemented by 236 * libuna_utf32_string_copy_from_utf16 237 */ 238 239 LIBUNA_EXTERN \ 240 int libuna_utf16_string_with_index_copy_from_utf32( 241 libuna_utf16_character_t *utf16_string, 242 size_t utf16_string_size, 243 size_t *utf16_string_index, 244 const libuna_utf32_character_t *utf32_string, 245 size_t utf32_string_size, 246 libcerror_error_t **error ); 247 248 LIBUNA_EXTERN \ 249 int libuna_utf16_string_compare_with_utf32( 250 const libuna_utf16_character_t *utf16_string, 251 size_t utf16_string_size, 252 const libuna_utf32_character_t *utf32_string, 253 size_t utf32_string_size, 254 libcerror_error_t **error ); 255 256 LIBUNA_EXTERN \ 257 int libuna_utf16_string_size_from_utf32_stream( 258 const uint8_t *utf32_stream, 259 size_t utf32_stream_size, 260 int byte_order, 261 size_t *utf16_string_size, 262 libcerror_error_t **error ); 263 264 LIBUNA_EXTERN \ 265 int libuna_utf16_string_copy_from_utf32_stream( 266 libuna_utf16_character_t *utf16_string, 267 size_t utf16_string_size, 268 const uint8_t *utf32_stream, 269 size_t utf32_stream_size, 270 int byte_order, 271 libcerror_error_t **error ); 272 273 /* The functionality for libuna_utf16_string_copy_to_utf32_stream is implemented by 274 * libuna_utf32_stream_copy_from_utf16 275 */ 276 277 LIBUNA_EXTERN \ 278 int libuna_utf16_string_with_index_copy_from_utf32_stream( 279 libuna_utf16_character_t *utf16_string, 280 size_t utf16_string_size, 281 size_t *utf16_string_index, 282 const uint8_t *utf32_stream, 283 size_t utf32_stream_size, 284 int byte_order, 285 libcerror_error_t **error ); 286 287 LIBUNA_EXTERN \ 288 int libuna_utf16_string_compare_with_utf32_stream( 289 const libuna_utf16_character_t *utf16_string, 290 size_t utf16_string_size, 291 const uint8_t *utf32_stream, 292 size_t utf32_stream_size, 293 int byte_order, 294 libcerror_error_t **error ); 295 296 LIBUNA_EXTERN \ 297 int libuna_utf16_string_size_from_scsu_stream( 298 const uint8_t *scsu_stream, 299 size_t scsu_stream_size, 300 size_t *utf16_string_size, 301 libcerror_error_t **error ); 302 303 LIBUNA_EXTERN \ 304 int libuna_utf16_string_copy_from_scsu_stream( 305 libuna_utf16_character_t *utf16_string, 306 size_t utf16_string_size, 307 const uint8_t *scsu_stream, 308 size_t scsu_stream_size, 309 libcerror_error_t **error ); 310 311 LIBUNA_EXTERN \ 312 int libuna_utf16_string_with_index_copy_from_scsu_stream( 313 libuna_utf16_character_t *utf16_string, 314 size_t utf16_string_size, 315 size_t *utf16_string_index, 316 const uint8_t *scsu_stream, 317 size_t scsu_stream_size, 318 libcerror_error_t **error ); 319 320 #if defined( __cplusplus ) 321 } 322 #endif 323 324 #endif /* !defined( _LIBUNA_UTF16_STRING_H ) */ 325 326