|
|
dd89bb |
#ifndef _NT_UNICODE_H_
|
|
|
dd89bb |
#define _NT_UNICODE_H_
|
|
|
dd89bb |
|
|
|
dd89bb |
/**
|
|
|
dd89bb |
* the conversion functions are based on the validation functions;
|
|
|
dd89bb |
* each of the conversion functions passes its peer validation
|
|
|
dd89bb |
* function an array of callback handlers, with each member of
|
|
|
dd89bb |
* the array corresponding to the number of units making the
|
|
|
dd89bb |
* current code point in utf-8, be that source or destination.
|
|
|
dd89bb |
* following this logic, then, callback_fn[1] handles 1-byte
|
|
|
dd89bb |
* code points [00..7F], callback_fn[2] handles 2-byte code
|
|
|
dd89bb |
* points [C2..DF,80..BF], and so on. the first member of
|
|
|
dd89bb |
* the array, callback_fn[0], is invoked once the null
|
|
|
dd89bb |
* termination of the source stream has been reached.
|
|
|
dd89bb |
**/
|
|
|
dd89bb |
|
|
|
414ad3 |
#include "nt_abi.h"
|
|
|
414ad3 |
#include "nt_compiler.h"
|
|
|
414ad3 |
|
|
|
dd89bb |
typedef struct _nt_utf8_callback_args {
|
|
|
dd89bb |
const unsigned char * src;
|
|
|
dd89bb |
void * dst;
|
|
|
dd89bb |
void * dst_cap;
|
|
|
dd89bb |
uint32_t byte_count;
|
|
|
dd89bb |
uint32_t code_point;
|
|
|
dd89bb |
size_t bytes_written;
|
|
|
dd89bb |
} nt_utf8_callback_args;
|
|
|
dd89bb |
|
|
|
dd89bb |
|
|
|
dd89bb |
typedef struct _nt_utf16_callback_args {
|
|
|
dd89bb |
const wchar16_t * src;
|
|
|
dd89bb |
void * dst;
|
|
|
dd89bb |
void * dst_cap;
|
|
|
dd89bb |
uint32_t byte_count;
|
|
|
dd89bb |
uint32_t code_point;
|
|
|
dd89bb |
size_t bytes_written;
|
|
|
dd89bb |
} nt_utf16_callback_args;
|
|
|
dd89bb |
|
|
|
dd89bb |
|
|
|
dd89bb |
typedef struct _nt_unicode_conversion_params_utf8_to_utf16 {
|
|
|
dd89bb |
const unsigned char * src;
|
|
|
dd89bb |
size_t src_size_in_bytes;
|
|
|
dd89bb |
wchar16_t * dst;
|
|
|
dd89bb |
size_t dst_size_in_bytes;
|
|
|
dd89bb |
size_t code_points;
|
|
|
dd89bb |
size_t bytes_written;
|
|
|
0e7864 |
const unsigned char * addr_failed;
|
|
|
dd89bb |
uintptr_t leftover_count;
|
|
|
dd89bb |
uintptr_t leftover_bytes;
|
|
|
dd89bb |
} nt_unicode_conversion_params_utf8_to_utf16, nt_strconv_mbtonative;
|
|
|
dd89bb |
|
|
|
dd89bb |
|
|
|
dd89bb |
typedef struct _nt_unicode_conversion_params_utf8_to_utf32 {
|
|
|
dd89bb |
const unsigned char * src;
|
|
|
dd89bb |
size_t src_size_in_bytes;
|
|
|
dd89bb |
wchar32_t * dst;
|
|
|
dd89bb |
size_t dst_size_in_bytes;
|
|
|
dd89bb |
size_t code_points;
|
|
|
dd89bb |
size_t bytes_written;
|
|
|
0e7864 |
const unsigned char * addr_failed;
|
|
|
dd89bb |
uintptr_t leftover_count;
|
|
|
dd89bb |
uintptr_t leftover_bytes;
|
|
|
dd89bb |
} nt_unicode_conversion_params_utf8_to_utf32, nt_strconv_mbtowide;
|
|
|
dd89bb |
|
|
|
dd89bb |
|
|
|
dd89bb |
typedef struct _nt_unicode_conversion_params_utf16_to_utf8 {
|
|
|
dd89bb |
const wchar16_t * src;
|
|
|
dd89bb |
size_t src_size_in_bytes;
|
|
|
dd89bb |
unsigned char * dst;
|
|
|
dd89bb |
size_t dst_size_in_bytes;
|
|
|
dd89bb |
size_t code_points;
|
|
|
dd89bb |
size_t bytes_written;
|
|
|
0e7864 |
const wchar16_t * addr_failed;
|
|
|
dd89bb |
uintptr_t leftover_count;
|
|
|
dd89bb |
uintptr_t leftover_bytes;
|
|
|
dd89bb |
} nt_unicode_conversion_params_utf16_to_utf8, nt_strconv_nativetomb;
|
|
|
dd89bb |
|
|
|
dd89bb |
|
|
|
dd89bb |
typedef struct _nt_unicode_conversion_params_utf16_to_utf32 {
|
|
|
dd89bb |
const wchar16_t * src;
|
|
|
dd89bb |
size_t src_size_in_bytes;
|
|
|
dd89bb |
wchar32_t * dst;
|
|
|
dd89bb |
size_t dst_size_in_bytes;
|
|
|
dd89bb |
size_t code_points;
|
|
|
dd89bb |
size_t bytes_written;
|
|
|
0e7864 |
const wchar16_t * addr_failed;
|
|
|
dd89bb |
uintptr_t leftover_count;
|
|
|
dd89bb |
uintptr_t leftover_bytes;
|
|
|
dd89bb |
} nt_unicode_conversion_params_utf16_to_utf32, nt_strconv_nativetowide;
|
|
|
dd89bb |
|
|
|
dd89bb |
__assert_aligned_size(nt_utf8_callback_args,__SIZEOF_POINTER__);
|
|
|
dd89bb |
__assert_aligned_size(nt_utf16_callback_args,__SIZEOF_POINTER__);
|
|
|
dd89bb |
__assert_aligned_size(nt_unicode_conversion_params_utf8_to_utf16,__SIZEOF_POINTER__);
|
|
|
dd89bb |
__assert_aligned_size(nt_unicode_conversion_params_utf8_to_utf32,__SIZEOF_POINTER__);
|
|
|
dd89bb |
__assert_aligned_size(nt_unicode_conversion_params_utf16_to_utf8,__SIZEOF_POINTER__);
|
|
|
dd89bb |
__assert_aligned_size(nt_unicode_conversion_params_utf16_to_utf32,__SIZEOF_POINTER__);
|
|
|
dd89bb |
|
|
|
dd89bb |
|
|
|
dd89bb |
typedef int32_t __fastcall ntapi_uc_utf8_callback_fn(
|
|
|
dd89bb |
__in nt_utf8_callback_args * callback_args);
|
|
|
dd89bb |
|
|
|
dd89bb |
|
|
|
dd89bb |
typedef int32_t __fastcall ntapi_uc_utf16_callback_fn(
|
|
|
dd89bb |
__in nt_utf16_callback_args * callback_args);
|
|
|
dd89bb |
|
|
|
dd89bb |
|
|
|
dd89bb |
typedef int32_t __stdcall ntapi_uc_validate_unicode_stream_utf8(
|
|
|
dd89bb |
__in const unsigned char * ch,
|
|
|
dd89bb |
__in size_t size_in_bytes __optional,
|
|
|
dd89bb |
__out size_t * code_points __optional,
|
|
|
0e7864 |
__out const unsigned char ** addr_failed __optional,
|
|
|
dd89bb |
__in ntapi_uc_utf8_callback_fn ** callback_fn __optional,
|
|
|
dd89bb |
__in nt_utf8_callback_args * callback_args __optional);
|
|
|
dd89bb |
|
|
|
dd89bb |
|
|
|
dd89bb |
typedef int32_t __stdcall ntapi_uc_validate_unicode_stream_utf16(
|
|
|
dd89bb |
__in const wchar16_t * wch,
|
|
|
dd89bb |
__in size_t size_in_bytes __optional,
|
|
|
dd89bb |
__out size_t * code_points __optional,
|
|
|
0e7864 |
__out const wchar16_t ** addr_failed __optional,
|
|
|
dd89bb |
__in ntapi_uc_utf16_callback_fn ** callback_fn __optional,
|
|
|
dd89bb |
__in nt_utf16_callback_args * callback_args __optional);
|
|
|
dd89bb |
|
|
|
dd89bb |
|
|
|
dd89bb |
typedef int __stdcall ntapi_uc_get_code_point_byte_count_utf8(
|
|
|
dd89bb |
__in uint32_t code_point);
|
|
|
dd89bb |
|
|
|
dd89bb |
|
|
|
dd89bb |
typedef int __stdcall ntapi_uc_get_code_point_byte_count_utf16(
|
|
|
dd89bb |
__in uint32_t code_point);
|
|
|
dd89bb |
|
|
|
dd89bb |
|
|
|
dd89bb |
typedef int32_t __stdcall ntapi_uc_convert_unicode_stream_utf8_to_utf16(
|
|
|
dd89bb |
__in_out nt_unicode_conversion_params_utf8_to_utf16 * params);
|
|
|
dd89bb |
|
|
|
dd89bb |
|
|
|
dd89bb |
typedef int32_t __stdcall ntapi_uc_convert_unicode_stream_utf8_to_utf32(
|
|
|
dd89bb |
__in_out nt_unicode_conversion_params_utf8_to_utf32 * params);
|
|
|
dd89bb |
|
|
|
dd89bb |
|
|
|
dd89bb |
typedef int32_t __stdcall ntapi_uc_convert_unicode_stream_utf16_to_utf8(
|
|
|
dd89bb |
__in_out nt_unicode_conversion_params_utf16_to_utf8 * params);
|
|
|
dd89bb |
|
|
|
dd89bb |
|
|
|
dd89bb |
typedef int32_t __stdcall ntapi_uc_convert_unicode_stream_utf16_to_utf32(
|
|
|
dd89bb |
__in_out nt_unicode_conversion_params_utf16_to_utf32 * params);
|
|
|
dd89bb |
|
|
|
dd89bb |
|
|
|
dd89bb |
#endif
|